理解SQL CURSOR语句

时间:2014-09-23 20:25:52

标签: sql-server-2008 triggers

有人可以解释一下在FROM之后INSERTED意味着什么吗?触发器中没有INSERTED表,下面是sql。 INSERTED是否引用具有触发器的表?

  DECLARE ChgCursor CURSOR FOR SELECT ACCID,USERID,GCID,........ FROM INSERTED
  SELECT  @ppid = ppid FROM sysdba.SYSTEMINFO WHERE SYSTEMINFOID = 'PR111'

1 个答案:

答案 0 :(得分:2)

SQL Server触发器有两个表:

  • Inserted,其中包含新插入的行(INSERT触发器中)或UPDATE触发器中的更新(新)值

  • Deleted,其中包含已删除的行(DELETE触发器中),或UPDATE触发器中的旧值(更新前)

这两个表在触发器中仅存在 ,并且具有与他们所连接的基础表相同的列#34; to(通过在表上定义的触发器)。

SQL Server触发器将被激活每个语句(不是每行一次),因此如果任何语句影响多行,则Inserted和/或Deleted 包含多行 - 您始终需要牢记这一点,并相应地对触发器进行编码。

查看更多详情,例如这里Data Points: Exploring SQL Server triggers

并提醒一句:SQL Server中的触发器应始终非常精简并且意味着 - 在触发器中执行 NOT 进行扩展且耗时的处理也意味着尽量避免触发器中的游标至少是其他T-SQL代码中的两倍。