Tout premier poste, s'il vous plaît soyez doux ...SQL Server: option permettant de spécifier si la transaction de mise à jour provenait du déclencheur?
J'ai besoin de mettre à jour une colonne lorsqu'une table est soit mis à jour ou ligne (s) inséré, donc je l'ai créé un déclencheur (AFTER INSERT, UPDATE
). Le problème est qu'il est récursif en raison du fait que l'insertion inclut une instruction de mise à jour, déclenchant ainsi le déclencheur à nouveau.
J'ai aussi essayé séparer le INSERT
et UPDATE
en deux déclencheurs différents, mais je l'ai rencontré un problème sp_settriggerorder()
et trigger_nestlevel()
, parce qu'il ya d'autres déclencheur en place, en raison de défauts d'application de la boîte.
Ma question est, est-il possible d'utiliser une clause IF indiquant si la mise à jour provient de l'application elle-même ou de mon déclencheur? Cas, si c'est mon déclencheur, que je pourrais facilement SAUF s'il y a un retour et il ne serait plus récursif.
CREATE TRIGGER [dbo].[JobCardMetlInsertUpdateItemDesc]
ON [dbo].[JobCardMetl] AFTER INSERT
AS
BEGIN TRANSACTION [Description]
UPDATE JobCardMetl
SET JobCardMetl.Description = item.Description
FROM JobCardMetl
INNER JOIN item ON JobCardMetl.Item = item.item
WHERE JobCardMetl.RecordDate = (SELECT MAX(JobCardMetl.RecordDate)
FROM JobCardMetl)
COMMIT TRANSACTION [Description]
récursion Trigger (un déclencheur de déclenchement directement lui-même) peut être désactivé au niveau de la base de données ou du serveur (?). Bien sûr, cela affecte tout. – RBarryYoung