J'ai une table intermédiaire qui définit plusieurs à plusieurs entre, par exemple, Customer
et Orders
, comme ceci:Sélection des lignes spécifiques de table deleted dans un déclencheur
USE [master]
GO
CREATE DATABASE Example
GO
USE [Example]
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
CREATE TRIGGER [dbo].[CustomerOrdersRemoved]
ON [dbo].[CustomerOrders]
FOR DELETE
AS
BEGIN
SET NOCOUNT ON;
--IF NOT EXISTS (SELECT CustomerId FROM CustomerOrders
INNER JOIN deleted ON CustomerOrders.CustomerId=deleted.CustomerId)
--this wont work
END
GO
DELETE CustomerOrders WHERE OrderId=1
GO
Maintenant, je dois avoir un déclencheur ON DELETE
sur cette table, qui aurait besoin de mettre à jour une autre table basée sur les clients qui n'ont pas ont des ordres restant dans la table. Dans ce cas, après l'opération DELETE
le client avec CustomerId=1
aura 1 commande avec OrderId=2
à gauche et le client avec CustomerId=2
n'aura plus aucune commande. Donc, je dois obtenir seulement le client avec CustomerId=2
du supprimévtable
dans le déclencheur.
Comment puis-je accomplir ceci?
vous ne pouvez pas faire quelque chose comme ceci: @ variable = (SELECT CustomerId dE supprimé), car il lancera quand un déclencheur sera tiré sur la suppression de plusieurs lignes et car ils ne peuvent pas être affectés à 1 variable. – kateroh
Je vois, la situation est différente. –