J'ai un déclencheur qui est utilisé pour auditer les lignes insérées, mises à jour et supprimées. J'ai un problème avec l'acquisition des anciennes valeurs et des nouvelles valeurs à partir du déclencheur. Le déclencheur utilise une boucle pour insérer toutes les valeurs d'une ligne qui a été modifiée de quelque façon que ce soit (insérée, mise à jour, supprimée). Cependant, mon code ne renvoie pas les valeurs mais les noms de colonnes en tant que valeurs.Le déclencheur de mise à jour/suppression SQL ne fonctionne pas correctement
Voici une partie de mon code:
SELECT @COLNAME = NAME
FROM SYSCOLUMNS
WHERE COLID = @FIELD AND
ID = (SELECT ID FROM SYSOBJECTS WHERE NAME = 'FIN_HOTEL_DTL_TYPE')
SELECT @OLDVAL = SUBSTRING(@COLNAME, 2, LEN(@COLNAME)) FROM DELETED
SELECT @NEWVAL = SUBSTRING(@COLNAME, 2, LEN(@COLNAME)) FROM INSERTED
SELECT @MODBY = MODIFIED_BY FROM INSERTED
SELECT @MODDT = MODIFIED_DATETIME FROM INSERTED
Ouais, je pensais autant au @ColName. J'utilisais ce type de logique parce que certaines des tables ont beaucoup de colonnes (ancienne DB, pas mon choix malheureusement) et je ne voulais pas avoir à coder chaque colonne. – mattgcon
Belle réponse, et en particulier la partie sur éviter de faire cela en boucle. J'ai mis en œuvre des déclencheurs similaires, et ils sont plus courts et plus simples sans la boucle, en plus de faire mieux. – TimothyAWiseman
Nous vous remercions de votre aide. J'ai sorti la boucle et j'ai simplement référencé les colonnes individuellement. – mattgcon