update:
I update
changed values in a column specifically in the other SQL script. So IF UPDATE(column_name)
statement should work. For example, When I changed LATTITUDE
AND LONGITUDE
column in the same row, the if update()
can capture the value changes while other if update(column_name)
will return false
as I did not update
those unchanged values. But the problem is, I wish column GROUP_ID
to be the same SEQUENCE
value as those changes are in same row. The SEQUENCE
value should only goes up when hitting next row
. However, in my script, there is no way to store current SEQUENCE
value in a variable.
I want to group those value changes in columns into SAME SEQUENCE
value if in one row otherwise increasing sequence
value. However, SEQUENCE
values always increases, is it because this update trigger
fired more than once if multiple columns changed?
@COUNT_update
is used to store current sequence
value.
How do I fix it up then?
thanks
ALTER TRIGGER [dbo].[AUDIT_SITE_UPDATE] ON [dbo].[SITE]
AFTER UPDATE
AS
BEGIN
DECLARE @SITE_ID [INT]
DECLARE @SITE_DESCRIPTION [varchar](1000)
DECLARE @SOURCE_SITE_NUMBER [varchar](50)
DECLARE @LATTITUDE [numeric](38, 10)
DECLARE @LONGITUDE [numeric](38, 10)
DECLARE @INSERT_TIME datetime2
DECLARE @INSERT_USER [varchar](256)
DECLARE @seq_Next_Val INT=SELECT NEXT VALUE FOR Audit_Seq,
-- UPDATE ROW
if exists(select * from inserted) and exists(select * from deleted)
BEGIN
declare @COUNT_update int;
set @COUNT_update =convert(int, (select current_value FROM sys.sequences WHERE name = 'Audit_Seq')) ;
if UPDATE(SITE_DESCRIPTION)
BEGIN
SELECT @site_id=SITE_ID,
@SOURCE_SITE_NUMBER=SOURCE_SITE_NUMBER,
@SITE_DESCRIPTION=SITE_DESCRIPTION,
@LATTITUDE=LATTITUDE,
@LONGITUDE=LONGITUDE,
@INSERT_TIME=INSERT_TIME,
@INSERT_USER=INSERT_USER
FROM deleted;
INSERT INTO AUDIT_SITE(site_id,GROUP_ID,ACTIVITY,SOURCE_SITE_NUMBER,COLUMN_NAME,OLD_VALUE,NEW_VALUE,INSERT_TIME,INSERT_USER)
VALUES( @SITE_ID,@COUNT_update,'UPDATE',@SOURCE_SITE_NUMBER,'SITE_DESCRIPTION',(SELECT SITE_DESCRIPTION FROM deleted)
,(SELECT SITE_DESCRIPTION FROM inserted),@INSERT_TIME,@INSERT_USER)
END
if UPDATE(LATTITUDE)
BEGIN
SELECT @site_id=SITE_ID,
@SOURCE_SITE_NUMBER=SOURCE_SITE_NUMBER,
@SITE_DESCRIPTION=SITE_DESCRIPTION,
@LATTITUDE=LATTITUDE,
@LONGITUDE=LONGITUDE,
@INSERT_TIME=INSERT_TIME,
@INSERT_USER=INSERT_USER
FROM deleted;
INSERT INTO AUDIT_SITE(site_id,GROUP_ID,ACTIVITY,SOURCE_SITE_NUMBER,COLUMN_NAME,OLD_VALUE,NEW_VALUE,INSERT_TIME,INSERT_USER)
VALUES( @SITE_ID,@COUNT_update,'UPDATE',@SOURCE_SITE_NUMBER,'LATTITUDE',(SELECT LATTITUDE FROM deleted)
,(SELECT LATTITUDE FROM inserted),@INSERT_TIME,@INSERT_USER)
END
if UPDATE(LONGITUDE)
BEGIN
SELECT @site_id=SITE_ID,@SOURCE_SITE_NUMBER=SOURCE_SITE_NUMBER,@SITE_DESCRIPTION=SITE_DESCRIPTION
,@LATTITUDE=LATTITUDE,@LONGITUDE=LONGITUDE,@INSERT_TIME=INSERT_TIME,@INSERT_USER=INSERT_USER FROM deleted;
INSERT INTO AUDIT_SITE(site_id,GROUP_ID,ACTIVITY,SOURCE_SITE_NUMBER,COLUMN_NAME,OLD_VALUE,NEW_VALUE,INSERT_TIME,INSERT_USER)
VALUES( @SITE_ID,@COUNT_update,'UPDATE',@SOURCE_SITE_NUMBER,'LONGITUDE',(SELECT LONGITUDE FROM deleted)
,(SELECT LONGITUDE FROM inserted),@INSERT_TIME,@INSERT_USER)
END
END
END