Il m'a été demandé de créer des tables d'historique pour chaque table d'une base de données. Créez ensuite un déclencheur qui écrira dans la table d'historique à chaque fois que la table primaire est mise à jour.Lecture des noms et des valeurs de colonnes insérées dans un déclencheur TSQL
Les tableaux d'histoire ont la même structure que la table primaire, mais avec quelques lignes supplémentaires (« id » et « type de mise à jour »)
Je ne l'ai jamais fait quoi que ce soit avec des déclencheurs avant, mais je comme faire est de parcourir dynamiquement les colonnes dans 'Inséré' et de construire une instruction d'insertion pour remplir la table de l'histoire.
Cependant, je ne peux pas comprendre comment lire les noms des colonnes et leurs valeurs individuelles.
Ma moitié fini déclencheur ressemble actuellement ...
CREATE TRIGGER tr_address_history
ON address
FOR UPDATE
AS
DECLARE @colCount int
DECLARE @maxCols int
SET @colCount = 0
SET @maxCols = (SELECT COUNT(column_name) FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME = 'Inserted')
PRINT 'Number of columns = ' + CONVERT(varChar(10),@maxCols)
WHILE (@colCount <= @maxCols)
BEGIN
DECLARE @name varchar(255)
SELECT @name = column_name FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME = 'Inserted'
DECLARE @value varchar(255)
SELECT @value = @name FROM Inserted
PRINT 'name = ' + @name + ' and value = ' + @value
SET @colCount = @colCount + 1
END
PRINT 'Done';
Lorsque la gâchette fonctionne il est dit que « Nombre de colonnes = 0 »
Quelqu'un peut-il me dire ce qui ne va pas avec:
SELECT COUNT(column_name) FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME = 'Inserted'
Merci ...
@ Beenay25 La table 'inserted' aura le même schéma que l'adresse qui apparaît dans' INFORMATION_SCHEMA' si c'est toute utilisation. –
Salut Mitch, Merci pour cela, mais je ne sais pas quels seront les noms des colonnes avant que le déclencheur ne soit lancé ... C'est pourquoi j'essayais d'obtenir les informations sur INFORMATION_SCHEMA Je dois mettre un déclencher sur soixante tables. Je ne veux pas avoir à coder en dur les noms de chaque colonne :( Je veux juste réutiliser le même code (bien, avec des noms de tables différents évidemment) – Beenay25
@ Beenay25: écrire un script pour générer les déclencheurs avec des noms câblés ... –