使用 .NET 从 SQL INSERT 获取 OUTPUT table

Get OUTPUT table from SQL INSERT using .NET

我正在尝试从 SQL 服务器数据库 (v14) 上的 INSERT 命令获取输出 table。

 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;

我有 3 个参数分别由 @s、@t 和 @u 为站点、票证标题和用户填充。

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

该命令成功地将记录插入数据库table,但没有return table @i 带有工单ID(自动递增)和创建日期(默认= GETDATE),这是我希望在保存到数据库后呈现给用户的内容。

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

The target table 'name' of the DML statement cannot have any enabled triggers if the statement contains an OUTPUT clause without INTO clause

我找到了几个链接,它们提供了一些解决这些问题的方法,但没有解决我的问题

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

是否可以提供任何帮助来帮助我实现目标?

我不知道你为什么需要 table。我想你只需要执行这个:

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

我在 table 中看不到任何值。当您执行此语句时,它将 return 结果发送给客户端,就像 SELECT 语句一样。

希望对您有所帮助。

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

 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;