SQL Trigger一次排1行

时间:2009-11-23 11:16:31

标签: sql sql-server-2005 triggers sql-update

我正在创建一个类似这样的更新触发器(SQL Server 2005):

行的状态列是23还是25不更新它。否则更新它。这很简单。我正在尝试

OldState = (Select State from Deleted)

If OldState in (25,23)
   Update it --how to do it easily?
else
   dont do nothing for this row

问题是触发器是用所有更新的行调用的,所以删除的是一个集合,这意味着第一条指令不起作用,因为它试图只获取1个值并得到一个集合..

这很简单,我错过了什么?

非常感谢

1 个答案:

答案 0 :(得分:3)

此代码假定:

  • 键保持相同以链接“旧”和“新”行
  • 您需要简单的更新后处理

示例:

UPDATE
   M    --yes, this is correct
SET
   SomeCol = SomeValue,
   ...
FROM
   MyTable M
   JOIN
   DELETED D ON M.KeyCol = D.KeyCol
WHERE
   D.State IN (23, 25)