首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL-Server - Update using inner join with output using inner join too using inner join too

SQL-Server - Update using inner join with output using inner join too using inner join too
EN

Stack Overflow用户
提问于 2018-10-29 22:13:02
回答 2查看 622关注 0票数 1

我正在执行Update_1,但现在我需要将更新后的行返回给我的用户,所以我正在寻找OUTPUT,我尝试了Update_2,但不起作用。我真的很想学习如何使用输出,也许你的查询没有意义,我翻译了查询并缩短了它,以便更好地理解。我们需要通过套接字将更新的行发送到我们的客户端,我希望在不执行select的情况下这样做,一旦我在inserted中已经有了更新的id,但如果这是不可能的,我会理解的。谢谢你的帮助。

Update_1:

代码语言:javascript
复制
UPDATE items
SET items.status = 'sold-out'
FROM items
INNER JOIN orderDetail
ON orderDetail.itemId = items.id
WHERE orderDetail.id = 7

Update_2:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2018-10-29 22:38:09

OUTPUT紧跟在SET子句之后。您可以从insertedFROM子句后面提到的任何表中进行选择。看起来你应该拥有:

代码语言:javascript
复制
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的各个部分是如何组合在一起的。

票数 1
EN

Stack Overflow用户

发布于 2018-10-29 22:37:41

从文档中看,您想要做的事情似乎行不通。output语句以类似于触发器的方式使用'virtual‘插入和删除的表。下面是一个示例语句:

代码语言:javascript
复制
UPDATE Production.Document  
SET DocumentSummary .WRITE (N'features',28,10)  
OUTPUT deleted.DocumentSummary,   
       inserted.DocumentSummary   
    INTO @MyTableVar  
WHERE Title = N'Front Reflector Bracket Installation';  

所以要做你想做的事情应该是这样的:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53047365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档