2010-11-13 95 views
12

需要INNER JOIN由UPDATE OUTPUT返回的结果集与另一个表并返回结果。可能吗?在一个t-sql查询中的UPDATE OUTPUT中的INNER JOIN

这里是一个小例子:

CREATE TABLE [dbo].[Customers] 
( 
    [CustomerId] [int], 
    [CustomerName] [nvarchar](50) 
) 
GO 

CREATE TABLE [dbo].[Orders] 
( 
    [OrderId] [int], 
    [OrderName] [nvarchar](50) 
) 
GO 

CREATE TABLE [dbo].[CustomerOrders] 
( 
    [CustomerId] [int], 
    [OrderId] [int] 
) 
GO 

INSERT INTO CustomerOrders (CustomerId, OrderId) VALUES (1, 1) 
INSERT INTO CustomerOrders (CustomerId, OrderId) VALUES (1, 2) 
INSERT INTO CustomerOrders (CustomerId, OrderId) VALUES (2, 1) 
GO 

需要更新CustomerOrders表的OrderId并返回客户的名称,都在1次射门。到目前为止,我只能返回CustomerIds:

UPDATE CustomerOrders SET OrderId=NULL 
OUTPUT Deleted.CustomerId 
WHERE OrderId='1' 

回答

20

TSQL/SQL服务器2005+支持加入UPDATE子句中 - 看到documentation

UPDATE CUSTOMERORDERS 
    SET orderid = NULL 
OUTPUT c.customername 
    FROM CUSTOMERORDERS co 
    JOIN CUSTOMERS c ON c.customerid = co.customerid 
+0

纯粹的天才...... O_O是SOOOO简单!? ?? !! – kateroh 2010-11-13 01:37:17