我正在尝试从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语句的目标表'名称'不能具有任何启用的触发器
我发现了几个链接,这些链接提供了一些解决方法,但并不能解决我的问题
Cannot use UPDATE with OUTPUT clause when a trigger is on the table
可以提供任何协助以帮助我实现目标吗?
我不知道你为什么需要桌子。我认为您只需执行以下命令即可:
INSERT INTO dbo.TICKET (SITE_ID, TICKET_TITLE, USER_ID)
OUTPUT inserted.TICKET_ID, inserted.CREATED_DATE
VALUES (@s, @t, @q);
我在表格中看不到任何值。当您执行此语句时,它将返回结果到客户端,就像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;