Passer un parametre à un trigger
Bonjour,
J'aimerais passer un parametre dans un trigger
Dans ma base j'ai les tables :
USERS avec les champs
us_id int auto-increment pour l'identifiant
us_civ int (pour la Civilitée) pour la civilité via une autre table
us_lastname nvarchar(50) pour le nom de famille
us_firstname nvarchar(50) pour le prénom
us_login nvarchar(50) pour le login
us_password varbinary(128) pour le mot de passe
USERSHISTORICS (pour historiser les action insert/update/delete sur la table USERS)
uh_id int auto-increment pour l'identifiant
us_id int pour connaitre l'utilisateur qui à été traité
uh_cdate datetime pour connaitre la date de traitement
uh_libelle nvarchar(50) pour indiquer le traitement effectué
us_id_change int pour savoir quel utilisateur à fait le traitement
J'ai fait une procedure stockée Insert user comme suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| CREATE PROCEDURE [dbo].[PS_User_Insert]
/* Déclaration des variables */
@us_civ int,
@us_lastname nvarchar(50),
@us_firstname nvarchar(50),
@us_login nvarchar(50),
@us_password nvarchar(50),
@us_id_change int,
/* Déclaration de la variable de sortie */
@message nvarchar(250) OUTPUT
AS
/* Déclaration de la variable password */
DECLARE @password varbinary(128)
/* instanciation de la variable password */
SET @password = CONVERT(varbinary, @us_password)
BEGIN
/* Si le login demandé existe déjà dans la base */
IF EXISTS (SELECT 1 FROM dbo.USERS WHERE us_login=@us_login )
BEGIN
/* Si le login demandé existe déjà dans la base mais qu'il est 'Delete' dans l'historique on peut ajouter le user */
IF EXISTS (SELECT 1 FROM dbo.USERS INNER JOIN dbo.USERSHISTORICS ON dbo.USERS.us_id = dbo.USERSHISTORICS.us_id WHERE us_login=@us_login AND dbo.USERSHISTORICS.uh_libelle = 'Deleted')
BEGIN
INSERT INTO dbo.USERS(us_civ, us_lastname, us_firstname, us_login, us_password)
VALUES (@us_civ, @us_lastname, @us_firstname, @us_login, @password)
SET @message = 'The user was created'
RETURN 0
END
/* Sinon on ne peut ajouter le user */
ELSE
BEGIN
SET @message = 'This login is already in use'
RETURN 1
END
END
/* Sinon on ajoute l'utilisateur */
ELSE
BEGIN
INSERT INTO dbo.USERS(us_civ, us_lastname, us_firstname, us_login, us_password)
VALUES (@us_civ, @us_lastname, @us_firstname, @us_login, @password)
SET @message = 'The user was created'
RETURN 0
END
END |
J'ai fait mon trigger comme suis en essayant FOR INSERT ou AFTER INSERT :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| CREATE TRIGGER [dbo].[TG_User_Insert] ON [dbo].[USERS]
FOR INSERT
AS
/* Déclaration de la variable */
DECLARE @us_id_creator int
/* Instanciation de la variable */
SELECT @us_id_change = @us_id_change FROM inserted
/* Ajoute une entrée dans l'historique */
INSERT INTO dbo.USERSHISTORICS(us_id, uh_cdate, uh_libelle, us_id_change)
VALUES (@@IDENTITY, GETDATE(), 'Created', @us_id_change) |
Mon problème c'est que cette variable ne s'instancie pas dans le trigger et reste null :
Code:
1 2
| /* Instanciation de la variable */
SELECT @us_id_change = @us_id_change FROM inserted |
Effectivement le paramètre passé à la procédure stockée (@us_id_change) n'est pas utilisé pendant l'insert alors comment dire à mon trigger de prendre le paramètre @us_id_change qui vient de la procédure stockée qui à déclenché l'insert et donc le trigger ?