Как работает оператор update () в триггере обновления на SQL-сервере? - PullRequest
0 голосов
/ 15 апреля 2019

обновление: я update изменил значения в столбце, особенно в другом сценарии SQL.Так что IF UPDATE(column_name) заявление должно работать.Например, когда я изменил столбец LATTITUDE AND LONGITUDE в той же строке, if update() может зафиксировать изменения значения, в то время как другие if update(column_name) вернут false, поскольку я не update не изменил эти значения.Но проблема в том, что я хочу, чтобы столбец GROUP_ID имел такое же значение SEQUENCE, поскольку эти изменения находятся в одной строке.Значение SEQUENCE должно увеличиваться только при нажатии следующего row.Однако в моем сценарии нет способа сохранить текущее значение SEQUENCE в переменной.

enter image description here


Я хочу сгруппировать этизначение изменяется в столбцах на ОДНО ЖЕ значение 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
...