SQL触发器语法参考

发表于:2010-8-09 14:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:david_5200    来源:51Testing软件测试网采编

分享:

  WITH APPEND 不能与 INSTEAD OF触发器一起使用,或者,如果显式声明 AFTER触发器,也不能使用该子句。只有当出于向后兼容而指定 FOR 时(没有INSTEAD OF 或 AFTER),才能使用 WITH APPEND。以后的版本将不支持WITH A
PPEND 和 FOR(将被解释为 AFTER)。

  NOT FOR REPLICATION

  表示当复制进程更改触发器所涉及的表时,不应执行该触发器。

  AS

  是触发器要执行的操作。

  sql_statement

  是触发器的条件和操作。触发器条件指定其它准则,以确定Delete、Insert 或 Update 语句是否导致执行触发器操作。

  当尝试 Delete、Insert 或 Update操作时,Transact-SQL语句中指定的触发器操作将生效。

  触发器可以包含任意数量和种类的 Transact-SQL语句。触发器旨在根据数据修改语句检查或更改数据;它不应将数据返回给用户。触发器中的Transact-SQL 语句常常包含控制流语言。Create TRIGGER语句中使用几个特殊的表:

  deleted 和 inserted是逻辑(概念)表。这些表在结构上类似于定义触发器的表(也就是在其中尝试用户操作的表);这些表用于保存用户操作可能更改的行的旧值或新值。例如,若要检索deleted 表中的所有值,请使用:

  Select *

  FROM deleted

  如果兼容级别等于 70,那么在 Delete、Insert 或Update 触发器中,SQL Server 将不允许引用 inserted 和 deleted 表中的text、ntext 或 image 列。不能访问 inserted 和 deleted 表中的text、ntext 和 image 值。若要在 Insert 或 Update触发器中检索新值,请将 inserted 表与原始更新表联接。当兼容级别是 65或更低时,对 inserted 或 deleted 表中允许空值的text、ntext 或 image列,将返回空值;如果这些列不可为空,则返回零长度字符串。当兼容级别是 80 或更高时,SQL Server 允许在表或视图上通过 INSTEADOF 触发器更新 text、ntext 或 image 列。

  n

  是表示触发器中可以包含多条 Transact-SQL语句的占位符。对于 IF Update (column) 语句,可以通过重复 Update(column) 子句包含多列。

  IF Update (column)

  测试在指定的列上进行的 Insert 或 Update操作,不能用于 Delete 操作。可以指定多列。因为在 ON子句中指定了表名,所以在 IF Update子句中的列名前不要包含表名。若要测试在多个列上进行的 Insert 或Update 操作,请在第一个操作后指定单独的 Update(column) 子句。在Insert 操作中 IF Update 将返回 TRUE值,因为这些列插入了显式值或隐性 (NULL)值。说明  IF Update (column) 子句的功能等同于IF、IF...ELSE 或 WHILE 语句,并且可以使用 BEGIN...END语句块。有关更多信息,请参见控制流语言。

  可以在触发器主体中的任意位置使用 Update (column)。

  column

  是要测试 Insert 或 Update 操作的列名。该列可以是 SQL Server支持的任何数据类型。但是,计算列不能用于该环境中。有关更多信息,请参见数据类型。

  IF (COLUMNS_UpdateD())

  测试是否插入或更新了提及的列,仅用于 Insert 或 Update触发器中。COLUMNS_UpdateD返回varbinary位模式,表示插入或更新了表中的哪些列。

  COLUMNS_UpdateD函数以从左到右的顺序返回位,最左边的为最不重要的位。最左边的位表示表中的第一列;向右的下一位表示第二列,依此类推。如果在表上创建的触发器包含8 列以上,则COLUMNS_UpdateD返回多个字节,最左边的为最不重要的字节。在 Insert 操作中COLUMNS_UpdateD将对所有列返回TRUE值,因为这些列插入了显式值或隐性 (NULL) 值。

    可以在触发器主体中的任意位置使用 COLUMNS_UpdateD。

62/6<123456>
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号