Bonjour à tous,
En fait, je tourne en rond depuis ce matin à la recherche d'une solution.
J’explique.
Je suis dans un trigger que je veux rendre le plus dynamiquement possible, car il sera dupliqué sur plusieurs tables de ma base (si il marche un jour...).
Dans ce trigger, j'ai besoin de comparer les champs avant et après insertion afin d'insérer des valeurs dans une autre table. Pour cela, j'utilise les tables inserted & deleted.
Comme je l'ai expliqué plus haut, il faut que ce soit dynamique donc je ne veux pas écrire une comparaison pour chaque colonne de la table et recommencer cela pour chaque table donc, je parcours le schéma de ma table pour avoir le nom des colonnes :
cela marche bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 DECLARE curseur1 CURSOR for select Column_name,Data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME= '' + @tablename + '' and Column_name <> 'evolution' OPEN curseur1; FETCH curseur1 INTO @nomcol,@datatype; WHILE @@FETCH_STATUS = 0 BEGIN ...... FETCH curseur1 INTO @nomcol,@datatype ; END CLOSE curseur1; DEALLOCATE curseur1;
Maintenant je voudrais récupérer la valeur avant et après insertion de la colonne @nomcol et c'est là que rien ne va plus, car je n'arrive pas à faire une requête sql dynamique à l'intérieur de ma boucle sur la table inserted ou deleted.
par exemple si je place ce code dans ma boucle :
=> il ne connait plus la table deleted car il la considère comme une table de ma base apparemment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SET @Sql = 'SELECT @old_Name = ' + @nomcol + ' FROM deleted'; SET @ParmDefinition = N' @old_Name varchar(30) OUTPUT'; EXECUTE sp_executesql @Sql, @ParmDefinition, @old_Name=@oldName OUTPUT;
Avez-vous une idée ?
Merci de votre aide.
Partager