2010-11-13 30 views
12

Necesita INNER UNIRSE a un conjunto de resultados devuelto por UPDATE OUTPUT con otra tabla y devolver los resultados. ¿Es posible?INNER JOIN en UPDATE OUTPUT en una consulta de t-sql

Aquí hay un pequeño ejemplo:

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 

necesidad de actualizar OrderId en la mesa CustomerOrders y los nombres de los clientes a cambio, todo en 1 tiro. Hasta el momento puedo volver CustomerIDs única:

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

Respuesta

20

TSQL/SQL Server 2005 + soportes se une a la cláusula de actualización - ver el documentation: puro genio

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

... o_O que era taaaan simple!? ?? !! – kateroh