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
