Je souhaite apporter une modification (Set Deleted = 1) rangées étant inséré dans ma table CustomerContact
si la retourne déclaration SELECT
plus de 0.MSSQL Trigger - Mise à jour enregistrement inséré sur INSERT
Je les éléments suivants, mais il reste non testé:
CREATE TRIGGER mark_cust_contact_deleted ON CustomerContact
AFTER INSERT AS
BEGIN
DECLARE @numrows INT;
/* Determine if order matches criteria for marking customer contact as DELETED immediately */
SELECT @numrows = COUNT(*)
FROM [Order] o
JOIN OrderMeterDetail om
ON o.OrderID = om.OrderID
WHERE o.WorkTypeID = 3 AND o.WorkActionID = 26 AND o.WorkStageID IN (109, 309, 409)
AND om.MeterDetailTypeID = 1 AND om.MeterLocationID IN (2, 4)
AND o.orderid IN (SELECT OrderID FROM INSERTED);
/* If the order matches the criteria, mark the customer contact as deleted */
IF (@numrows >= 1)
UPDATE CustomerContact
SET Deleted = 1
WHERE CustomerContactID IN (SELECT CustomerContactID FROM INSERTED);
END
Dans ma déclaration IF
, je me sers FROM INSERTED
, en supposant que cela retournera le id nouvellement inséré pour l'enregistrement qui a été créé par l'insert.
J'ai deux questions au sujet de cette déclaration:
cette partie de la déclaration remplirai un
UPDATE
juste le dossier qui vient d'être inséré dansCustomerContact
?UPDATE CustomerContact SET Deleted = 1 WHERE CustomerContactID IN (SELECT CustomerContactID FROM INSERTED);
Est-ce la façon qui serait jugé correct de faire un changement à une ligne qui vient d'être inséré en fonction du résultat d'une déclaration
SELECT
?
CustomerContactID
est une colonne à clé primaire auto-incrémentée.
Est-il possible d'effectuer le déclencheur pour chaque ligne? – Luke
Bonne idée! Je vais essayer – Luke
Pouvez-vous expliquer pourquoi l'essai original de OP ne fonctionnerait pas s'il y avait plusieurs lignes insérées? Je ne le vois pas, il définit '@ numrows' où' o.orderid IN (SELECT OrderID FROM INSERTED) 'cherche IF (@numrows> = 1)' et met à jour 'WHERE CustomerContactID IN (SELECT CustomerContactID FROM INSERTED)' où échouerait-il exactement? De couse votre syntaxe en utilisant 'JOIN's est plus belle;) – DrCopyPaste