如果 DML 语句包含 OUTPUT 子句而不包含 INTO 子句,则该语句不能具有任何启用的触发器

Pea*_*Jam 8 sql sql-server triggers

我一直在 StackOverflow 和其他网站上搜索以解决我的错误,但没有成功,所以是时候发帖看看是否有人可以告诉我哪里出了问题。

我的系统有一个形式简单的 PowerApp。保存表单时,字段将写入 table1。然后,我想在 table1 上创建一个触发器,以便将每条新记录中的一个字段插入到 table2 中。

尽管我的代码中没有输出子句,但我收到以下错误:

请求的操作无效。服务器响应: Microsoft SQL:如果 DML 语句包含不带 INTO 子句的 OUTPUT 子句,则该语句的目标表“table1”不能具有任何启用的触发器。内部异常:Microsoft SQL:如果该语句包含不带 INTO 子句的 OUTPUT 子句,则 DML 语句的目标表“table1”不能有任何启用的触发器。

将我的代码剥离回以下内容仍然会引发相同的错误:

ALTER TRIGGER [dbo].[FormatID] 
   ON  [dbo].[table1]
   AFTER INSERT
AS 
BEGIN

    INSERT INTO [dbo].[table2](origID) 
    VALUES (1)

END
Run Code Online (Sandbox Code Playgroud)

任何建议请忽略,我觉得我好像错过了一些明显的东西......

lpt*_*ptr 7

您的应用程序将 dml 语句的插入/删除值输出为结果集。当表(dml 的目标)上有触发器时,这是不可能的

create table dbo.table1(id int);
create table dbo.table2(origID int);
go

CREATE OR ALTER TRIGGER [dbo].[FormatID] 
   ON  [dbo].[table1]
   AFTER INSERT
AS 
BEGIN

    INSERT INTO [dbo].[table2](origID) 
    VALUES (1)

END;


--succeeds
insert into dbo.table1(id) 
values (1);
go

--fails
insert into dbo.table1(id) 
output inserted.id --output cannot be a resultset(in the void) because there is a trigger
values(1);

--succeeds
declare @outputtable table (id int);
insert into dbo.table1(id) 
output inserted.id into @outputtable(id)--output into a table
values(1);
Run Code Online (Sandbox Code Playgroud)