Полное соединение - две таблицы с одинаковыми атрибутами и первичными ключами, но разными значениями. Что будет на выходе, когда я выполню полное соединение? - PullRequest
0 голосов
/ 05 августа 2020

Я пишу функцию триггера и хочу отметить изменения, происходящие с данными. Это для обновления, удаления и вставки. Я пытаюсь использовать добавленные и удаленные таблицы в триггере, чтобы выполнить полное соединение с ними. Но я не могу понять, является ли result.OrderID первичным ключом.

select @orderID = isnull (i.OrderID, d.OrderID)
from inserted i
full join deleted d on i.OrderID = d.OrderID;

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Думаю, я бы использовал exists:

update SaleOrder
    set LastModified = @Lastmodified
    where exists (select 1 from inserted i where i.OrderId = SaleOrder.OrderId) or
          exists (select 1 from deleted d where d.OrderId = SaleOrder.OrderId) ;
0 голосов
/ 05 августа 2020

Если я правильно понял, то это могло быть лучше:

UPDATE so
SET LastModified = @LastModified
FROM SaleOrder so
INNER JOIN (SELECT OrderId 
           FROM Inserted 
           UNION
           SELECT OrderId
           FROM Deleted) as t
  ON so.OrderId = t.OrderId

Или другим способом:

UPDATE SaleOrder
SET LastModified = @LastModified
WHERE OrderId IN (SELECT OrderId 
                  FROM Inserted 
                  UNION
                  SELECT OrderId
                  FROM Deleted)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...