是"如果没有更新(列)"有效的语法?

时间:2015-02-04 06:09:32

标签: sql-server tsql

如果在Sql Server触发器中我想测试UPDATE语句中是否包含 not 列,

IF NOT UPDATE(column)

正确的语法?我已经阅读了一个更老的讨论,建议这可能不起作用,并且应该使用IF UPDATE(column)...ELSE语法,除非我没有任何相关的声明要添加第一个条件。

2 个答案:

答案 0 :(得分:2)

语法IF NOT UPDATE(column)是正确的,可以通过以下简单测试进行验证,如@NoDisplayName所指出的那样:

CREATE TABLE dbo.Test(Id int, Foo int);
GO
INSERT INTO dbo.Test VALUES (1, 1);
GO

CREATE TRIGGER TestTrigger ON dbo.Test
AFTER UPDATE
AS
IF NOT UPDATE(Foo)
  PRINT 'Foo Not Included In Update Statement';
IF UPDATE(Id)
  PRINT 'Id Included In Update Statement';
GO

UPDATE dbo.Test SET Id = 1;

/*
output:
Foo Not Included In Update Statement
Id Included In Update Statement
*/

答案 1 :(得分:-1)

我现在没有服务器来检查这个,但是这就是你可以在更新中列出行的方法,其中" columnToCheck"没有改变。

CREATE TRIGGER trgMyTrigger ON [dbo].[myTable] 
AFTER UPDATE
AS

    SELECT
    *
    FROM inserted AS i
    INNER JOIN deleted AS d ON i.ID = d.ID
    WHERE i.columnToCheck = d.columnToCheck

GO