我正在执行Update_1,但现在我需要将更新后的行返回给我的用户,所以我正在寻找OUTPUT,我尝试了Update_2,但不起作用。我真的很想学习如何使用输出,也许你的查询没有意义,我翻译了查询并缩短了它,以便更好地理解。我们需要通过套接字将更新的行发送到我们的客户端,我希望在不执行select的情况下这样做,一旦我在inserted中已经有了更新的id,但如果这是不可能的,我会理解的。谢谢你的帮助。
Update_1:
UPDATE items
SET items.status = 'sold-out'
FROM items
INNER JOIN orderDetail
ON orderDetail.itemId = items.id
WHERE orderDetail.id = 7Update_2:
UPDATE items
SET items.status = 'sold-out'
FROM items
INNER JOIN orderDetail
ON orderDetail.itemId = items.id
WHERE orderDetail.id = 7
OUTPUT items.id, items.description, orderDetail.id
FROM items
INNER JOIN orderDetail
ON orderDetail.itemId = items.id
WHERE items.id = inserted.id发布于 2018-10-29 22:38:09
OUTPUT紧跟在SET子句之后。您可以从inserted或FROM子句后面提到的任何表中进行选择。看起来你应该拥有:
UPDATE items
SET items.status = 'sold-out'
OUTPUT inserted.id, inserted.description, orderDetail.id
FROM items
INNER JOIN orderDetail
ON orderDetail.itemId = items.id
WHERE orderDetail.id = 7您应该始终参考whole statement的语法,以了解T-SQL的各个部分是如何组合在一起的。
发布于 2018-10-29 22:37:41
从文档中看,您想要做的事情似乎行不通。output语句以类似于触发器的方式使用'virtual‘插入和删除的表。下面是一个示例语句:
UPDATE Production.Document
SET DocumentSummary .WRITE (N'features',28,10)
OUTPUT deleted.DocumentSummary,
inserted.DocumentSummary
INTO @MyTableVar
WHERE Title = N'Front Reflector Bracket Installation'; 所以要做你想做的事情应该是这样的:
DECLARE @temptable table (
id int,
description nvarchar(max));
UPDATE items
SET items.status = 'sold-out'
FROM items
INNER JOIN orderDetail
ON orderDetail.itemId = items.id
WHERE orderDetail.id = 7
OUTPUT inserted.id, inserted.description into @temptable
select @temptable.id, @temptable.description, orderdetail.id as orderdetailid
FROM @temptable
INNER JOIN orderDetail
ON orderDetail.itemId = @temptable.id我不能保证上面的代码能正确编译,但它给了你一个概念。output子句的文档在这里:https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017
https://stackoverflow.com/questions/53047365
复制相似问题