обновление: я update
изменил значения в столбце, особенно в другом сценарии SQL.Так что IF UPDATE(column_name)
заявление должно работать.Например, когда я изменил столбец LATTITUDE
AND LONGITUDE
в той же строке, if update()
может зафиксировать изменения значения, в то время как другие if update(column_name)
вернут false
, поскольку я не update
не изменил эти значения.Но проблема в том, что я хочу, чтобы столбец GROUP_ID
имел такое же значение SEQUENCE
, поскольку эти изменения находятся в одной строке.Значение SEQUENCE
должно увеличиваться только при нажатии следующего row
.Однако в моем сценарии нет способа сохранить текущее значение SEQUENCE
в переменной.
Я хочу сгруппировать этизначение изменяется в столбцах на ОДНО ЖЕ значение SEQUENCE
, если в одной строке в противном случае увеличивается значение sequence
.Однако значения SEQUENCE
всегда увеличиваются, потому что это update trigger
сработало более одного раза, если изменилось несколько столбцов?
@COUNT_update
используется для хранения текущего значения sequence
.Как мне исправить это тогда?спасибо
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