使用.NET从SQL INSERT获取输出表

问题描述 投票:0回答:2

我正在尝试从SQL Server数据库(v14)上的INSERT命令获取OUTPUT表。

 DECLARE @i TABLE (TICKET_ID int, CREATED_DATE datetime);

 INSERT INTO dbo.TICKET (SITE_ID, TICKET_TITLE, USER_ID) 
 OUTPUT INSERTED.TICKET_ID, INSERTED.CREATED_DATE INTO @i 
 VALUES (@s, @t, @q);

 SELECT * FROM @i;

我分别通过@ s,@ t和@u为站点,票证标题和用户填充了3个参数。

我正在使用4.5框架上带有ExecuteReader函数的SqlClient.SqlDataReader对象调用命令。

该命令成功地将记录插入数据库表中,但是不返回表@i及其票证ID(自动递增)和创建日期(默认= GETDATE),这是我一旦保存就希望向用户显示的日期到数据库。

我已经尝试删除命令中的@i TABLE,但是出现了.NET错误:

如果该语句包含不带INTO子句的OUTPUT子句,则DML语句的目标表'名称'不能具有任何启用的触发器

我发现了几个链接,这些链接提供了一些解决方法,但并不能解决我的问题

https://docs.microsoft.com/en-us/previous-versions/dotnet/articles/ms971497(v=msdn.10)?redirectedfrom=MSDN

Cannot use UPDATE with OUTPUT clause when a trigger is on the table

可以提供任何协助以帮助我实现目标吗?

c# .net sql-server output sqldatareader
2个回答
0
投票

我不知道你为什么需要桌子。我认为您只需执行以下命令即可:

       INSERT INTO dbo.TICKET (SITE_ID, TICKET_TITLE, USER_ID) 
       OUTPUT inserted.TICKET_ID, inserted.CREATED_DATE
       VALUES (@s, @t, @q);

我在表格中看不到任何值。当您执行此语句时,它将返回结果到客户端,就像SELECT语句一样。

希望有所帮助。


0
投票

似乎很痛苦,但是另一种选择可能只是这样做:

 INSERT INTO dbo.TICKET (SITE_ID, TICKET_TITLE, USER_ID) 
 VALUES (@s, @t, @q);

 SELECT TICKET_ID, CREATED_DATE 
 FROM dbo.TICKET 
 WHERE SITE_ID = @s AND TICKET_TITLE = @t AND USER_ID = @q;
© www.soinside.com 2019 - 2024. All rights reserved.