ВНУТРЕННЕЕ СОЕДИНЕНИЕ В ВЫХОДЕ ОБНОВЛЕНИЯ в одном запросе t-sql - PullRequest
14 голосов
/ 13 ноября 2010

Нужно ВНУТРИ СОЕДИНИТЬ набор результатов, возвращенный выходом UPDATE, с другой таблицей и вернуть результаты.Возможно ли это?

Вот небольшой пример:

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

Необходимо обновить OrderId в таблице CustomerOrders и вернуть имена клиентов, все в одном кадре.Пока я могу вернуть только CustomerIds:

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

1 Ответ

25 голосов
/ 13 ноября 2010

TSQL / SQL Server 2005+ поддерживает JOIN в предложении UPDATE - см. Документацию :

UPDATE CUSTOMERORDERS
   SET orderid = NULL
OUTPUT c.customername
  FROM CUSTOMERORDERS co
  JOIN CUSTOMERS c ON c.customerid = co.customerid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...