Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL触发器一次触发1行_Sql_Sql Server 2005_Triggers_Sql Update - Fatal编程技术网

SQL触发器一次触发1行

SQL触发器一次触发1行,sql,sql-server-2005,triggers,sql-update,Sql,Sql Server 2005,Triggers,Sql Update,我正在创建一个更新触发器,如下所示(SQL Server 2005): 行的state列是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 问题是触发器是用所有更新的行调用的,因此deleted是一个set,这意

我正在创建一个更新触发器,如下所示(SQL Server 2005):

行的state列是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
问题是触发器是用所有更新的行调用的,因此deleted是一个set,这意味着第一条指令将无法工作,因为它试图只获取1个值,而它获取了一个set

事情很简单,我是不是遗漏了什么

非常感谢

此代码假定:

  • 键保持不变以链接“旧”行和“新”行
  • 您需要简单的更新后处理
例如:

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)