如果 DML 语句包含不带 INTO 子句的 OUTPUT 子句,则该语句的目标表 'CDM_HIS_GHKB' 不能具有任何启用的触发器。
触发器
从 OUTPUT 中返回的列反映 INSERT、UPDATE 或 DELETE 语句完成之后但在触发器执行之前的数据。
对于 INSTEAD OF 触发器,即使没有因为触发器的操作而发生修改,也会如同实际执行 INSERT、UPDATE 或 DELETE 那样生成返回的结果。 如果在触发器的主体内使用包含 OUTPUT 子句的语句,则必须使用表别名来引用触发器 inserted 和 deleted 表,以免使用与 OUTPUT 关联的 INSERTED 和 DELETED 表复制列引用。
如果指定了 OUTPUT 子句但未同时指定 INTO 关键字,则对于给定的 DML 操作,DML 操作的目标不能启用对其定义的任何触发器。 例如,如果在 UPDATE 语句中定义了 OUTPUT 子句,则目标表不能具有任何启用的 UPDATE 触发器。
如果设置了 sp_configure 选项 disallow results from triggers,则从触发器内调用语句时,不带 INTO 子句的 OUTPUT 子句将导致该语句失败。
将从 OUTPUT 子句返回的数据插入表
在捕获嵌套的 INSERT、UPDATE、DELETE 或 MERGE 语句中 OUTPUT 子句的结果并将这些结果插入目标表时,请牢记以下信息:
-
整个操作是原子的。 INSERT 语句和包含 OUTPUT 子句的嵌套 DML 语句要么都执行,要么整个语句都失败。
-
以下限制适用于外层 INSERT 语句的目标:
-
目标不能为远程表、视图或公用表表达式。
-
目标不能有 FOREIGN KEY 约束,或者被 FOREIGN KEY 约束所引用。
-
不能对目标定义触发器。
-
目标不能参与合并复制或事务复制的可更新订阅。
-
-
对于嵌套的 DML 语句有以下限制:
-
目标不能为远程表或分区视图。
-
源本身不能包含 dml_table_source <> 子句
-
sql语句钟使用 output inserted.KBID返回数据,需要创建一个临时表接收