Passer une variable dans un déclencheur
J'ai un trigger
qui traite de certaines des données à des fins de journalisation de la sorte:
CREATE TRIGGER trgDataUpdated
ON tblData FOR UPDATE
AS
BEGIN
INSERT INTO tblLog ( ParentID, OldValue, NewValue, UserID )
SELECT deleted.ParentID, deleted.Value, inserted.Value,
@intUserID -- how can I pass this in?
FROM inserted INNER JOIN deleted ON inserted.ID = deleted.ID
END
Comment puis-je passer dans la variable @intUserID
dans l'au-dessus de déclencheur, comme dans le code suivant:
DECLARE @intUserID int
SET @intUserID = 10
UPDATE tblData
SET Value = @x
PS: je sais que je ne peux pas littéralement passer dans @intUserID
à la détente, c'était juste utilisés à des fins d'illustration.
source d'informationauteur Codesleuth
Vous devez vous connecter pour publier un commentaire.
- Je utiliser
SET CONTEXT_INFO
pour ce genre d'action. C'est un 2008+ lien, avant lien a été mis à la retraite.Sur SQL Server 2005+, vous auriez
CONTEXT_INFO
de le lire, mais sinon, vous devrez obtenir decontext_info
colonne dansdbo.sysprocesses
.vous ne pouvez pas passer une variable dans un déclencheur.
la seule façon d'obtenir l'information dans le déclencheur est d'être en mesure de SÉLECTIONNER sur la base des tables INSÉRÉES ou SUPPRIMÉES ou ajouter une colonne sur la table affectée et mettre la valeur dans cette colonne.
MODIFIER dans la question précédente OP posté à ce sujet, ils ont dit qu'ils ne voulaient pas utiliser CONTEXT_INFO, mais ici ils disent que c'est Ok pour l'utiliser, voici donc une CONTEXT_INFO exemple d'utilisation:
dans la procédure de la mise à jour
ici est la partie de la gâchette pour récupérer la valeur:
Vous ne pouvez pas passer des variables à des déclencheurs. Selon la façon dont les utilisateurs se connecter à la base de données vous pouvez utiliser
SYSTEM_USER
pour obtenir le courant de l'utilisateur connecté à la base de données.Vous n'avez pas de passer des variables à des déclencheurs parce que vous n'êtes pas en mesure d'appeler déclenche directement. Ils sont exécutés en raison de données insérées, modifié ou supprimé.
Pourquoi ne pas essayer ceci:
Vieille question, mais je me demande comment personne n'a mentionné que des tables temporaires créées avant le déclenchement est invoquée sont visibles sur le déclencheur?
Donc, ce serait le travail:
Le déclenchement de voir la table temp #intUserID et peut lire l'id à partir de là.