IF服务器中的UPDATE()触发器

Jas*_*n M 30 sql sql-server triggers sql-server-2005

如果有的话:

IF UPDATE (col1)
Run Code Online (Sandbox Code Playgroud)

...在表上的SQL服务器触发器中,仅当col1已更改或已更新时才返回true吗?

我有一个常规的更新查询

UPDATE table-name 
   SET col1 = 'x', 
       col2 =  'y' 
 WHERE id = 999
Run Code Online (Sandbox Code Playgroud)

现在关注的是,如果"col1"先前为"x",那么我们将其更新为"x"将IF UPDATE ("col1")触发返回True或不返回?

我正面临这个问题,因为我的保存查询对于所有列都是通用的,但是当我添加这个条件时它会返回True,即使它没有被更改...所以我担心在这种情况下该怎么做如果我想添加这样的条件?

Rem*_*anu 47

如果列已更新,则返回true.更新意味着查询已设置列的值.以前的值是否与新值相同在很大程度上是相关的.

UPDATE table SET col = col
Run Code Online (Sandbox Code Playgroud)

这是一个更新.

UPDATE table SET col = 99
Run Code Online (Sandbox Code Playgroud)

当col已经具有值99时,它也是更新.

  • 请注意,在INSERT上,UPDATED()函数为所有列返回1.当然. (12认同)
  • 事实证明UPDATE()函数不会为DELETE返回true.http://stackoverflow.com/questions/29286034 (5认同)
  • 还有DELETE? (2认同)

Ray*_*Ray 10

在触发器中,您可以访问两个可能有用的内部表.'inserted'表包含每个受影响行的新版本.'deleted'表包含每行的原始版本.您可以比较这些表中的值,以查看您的字段值是否实际更改.