Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 如果DML语句包含不带INTO子句的OUTPUT子句,则该语句不能有任何已启用的触发器_Sql_Sql Server_Triggers - Fatal编程技术网

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

Sql 如果DML语句包含不带INTO子句的OUTPUT子句,则该语句不能有任何已启用的触发器,sql,sql-server,triggers,Sql,Sql Server,Triggers,我一直在拖网StackOverflow和其他网站来解决我的错误,但都没有成功,所以现在是时候发表文章了,看看是否有人能告诉我哪里出了问题 我的系统有一个简单表单的PowerApp。保存表单时,字段将写入表1。然后我想在表1上创建一个触发器,以便将每个新记录中的一个字段插入表2中 尽管我的代码中没有output子句,但我得到以下错误: 请求的操作无效。服务器响应:Microsoft SQL:如果DML语句包含OUTPUT子句而不包含INTO子句,则该语句的目标表“table1”不能具有任何已启用的

我一直在拖网StackOverflow和其他网站来解决我的错误,但都没有成功,所以现在是时候发表文章了,看看是否有人能告诉我哪里出了问题

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

尽管我的代码中没有output子句,但我得到以下错误:

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

将代码剥离回以下位置仍会引发相同的错误:

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

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

END

如果有任何建议,请不要提,我觉得我好像遗漏了一些明显的东西…

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


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



错误是告诉你这里的问题;你不能回避这个问题。您最好告诉我们您实际想要实现的目标。听起来您表单背后的代码只是使用
output
返回结果集,而不是
output。。。进入
以将其存储在@table变量、#temp或#temp表或持久化表中。这与Hey@AlwaysLearning基本上是相同的问题和解决方案。感谢您的回复。你是说,尽管我不使用输出或插入等,但我需要适应结果集并将其存储在某个地方?我以前查看过该链接,但与大多数示例一样,此人正在使用插入或删除的链接,而我没有。也许我对它的编码和理解过于文字化了……在power应用程序中使用存储过程,而不是插入行组件。正如这里所讨论的@MartinSmith,这将输出子句附加到INSERT中,非常感谢,这让我省去了很多麻烦;你不能回避这个问题。您最好告诉我们您实际想要实现的目标。听起来您表单背后的代码只是使用
output
返回结果集,而不是
output。。。进入
以将其存储在@table变量、#temp或#temp表或持久化表中。这与Hey@AlwaysLearning基本上是相同的问题和解决方案。感谢您的回复。你是说,尽管我不使用输出或插入等,但我需要适应结果集并将其存储在某个地方?我以前查看过该链接,但与大多数示例一样,此人正在使用插入或删除的链接,而我没有。也许我对它的编码和理解过于文字化了……在power应用程序中使用存储过程,而不是插入行组件。正如这里所讨论的那样,这将输出子句附加到了INSERT中@MartinSmith非常感谢,这让我省去了很多麻烦。您好@lptr谢谢您的回答,我已经在我的机器上运行了您的示例,还有一个问题:)好的,我的困惑是为什么第一个“INSERT into”尽管没有像示例中的第三个那样容纳输出结果集,但仍成功?@PeaceAndJam:如果表1没有触发器,则所有3条语句都成功。如果table1确实有触发器,那么第二条语句将失败(因为当目标表有触发器时,输出必须被引导到容器/表中)…并且第一条语句不使用/没有输出,它总是成功的。嘿@lptr谢谢你的耐心:)这就是为什么我很难理解我的问题:我的触发器没有使用output子句,所以我不明白为什么通过PowerApp插入table1时会抛出错误。当我运行您提供的示例时,它是有效的,但都在SSMS中。。。我想知道,从PowerApps表单中插入的内容是否有什么奇怪的地方?我想Martin Smith在上面的评论中已经证实了这是PowerApps的一个限制。感谢您的时间@lptr!非常感谢。您好@lptr谢谢您的回复,我已经在我的机器上运行了您的示例,还有一个问题:)好的,我的困惑是为什么第一个“插入”尽管没有像示例中的第三个那样容纳输出结果集,但仍成功?@PeaceAndJam:如果表1没有触发器,则所有3条语句都成功。如果table1确实有触发器,那么第二条语句将失败(因为当目标表有触发器时,输出必须被引导到容器/表中)…并且第一条语句不使用/没有输出,它总是成功的。嘿@lptr谢谢你的耐心:)这就是为什么我很难理解我的问题:我的触发器没有使用output子句,所以我不明白为什么通过PowerApp插入table1时会抛出错误。当我运行您提供的示例时,它是有效的,但都在SSMS中。。。我想知道,从PowerApps表单中插入的内容是否有什么奇怪的地方?我想Martin Smith在上面的评论中已经证实了这是PowerApps的一个限制。感谢您的时间@lptr!非常感谢。
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);