更新后的TSQL触发器在一个IF UPDATE中检查多列上的更新

J3F*_*FFK 5 sql t-sql sql-server triggers sql-update

TSQL中After Update触发器的基本语法是:

CREATE TRIGGER [dbo].[triggerName]
   ON [dbo].[Table]
   AFTER UPDATE, INSERT --trigger when Update or Insert in table
AS BEGIN
    SET NOCOUNT ON;
    IF UPDATE (ColumnA) -- if ColumnA updates start
    begin
        UPDATE Table
        SET ColumnC = ColumnA + ColumnB -- recalculate Column C
    end 
    IF UPDATE (ColumnB) -- if ColumnB updates start
    begin
        UPDATE Table
        SET ColumnC = ColumnA + ColumnB -- recalculate Column C
    end 
END
Run Code Online (Sandbox Code Playgroud)

现在我觉得上面可以工作,但是可以将两个IF UPDATES合二为一起吗?:这样的事情:

IF UPDATE (ColumnA) OR (ColumnB) -- if ColumnA or ColumnB updates start
        begin
            UPDATE Table
            SET ColumnC = ColumnA + ColumnB -- recalculate Column C
        end 
Run Code Online (Sandbox Code Playgroud)

您当然可以使用计算列,但出于好奇,我想知道您是否可以在触发器中一次检查多列的更新,然后执行更新后触发器修改.

Gor*_*off 6

评论有点长.

UPDATE()是触发器中使用的函数.没有特定的语法if UPDATE().据我所知,触发器允许您在if语句中组合多个条件.

但是,更重要的是,阅读文档上UPDATE().文档中使用的示例是:

IF ( UPDATE (StateProvinceID) OR UPDATE (PostalCode) )
BEGIN
    RAISERROR (50009, 16, 10)
END;
Run Code Online (Sandbox Code Playgroud)

所以,为你使用正确的语法,你会没事的:

IF UPDATE(ColumnA) OR UPDATE(ColumnB) -- if ColumnA or ColumnB updates start
    begin
        UPDATE Table
        SET ColumnC = ColumnA + ColumnB -- recalculate Column C
    end 
Run Code Online (Sandbox Code Playgroud)

但是,我建议您使用计算列.