2010-11-13 5 views
12

Besoin de INNER JOIGNE un resultset retourné par UPDATE OUTPUT avec une autre table et retourne les résultats. C'est possible?INNER JOIN dans UPDATE OUTPUT dans une requête t-sql

Voici un petit exemple:

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 

Nécessité de mettre à jour OrderId sur la table CustomerOrders et retourne les noms des clients, tout en 1 coup. Jusqu'à présent, je ne peux retourner CustomerIds:

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

Répondre

20

TSQL/SQL Server 2005+ supports dans la clause JOIN UPDATE - voir le documentation:

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

pur génie ... o_O était aussi simple que cela soooo! ?? !! – kateroh