2010-12-16 22 views
1

Ich benutze SQL Server 2008 und möchte wissen, ob es eine Möglichkeit gibt, einen generischen Update-Trigger zu schreiben, die überprüft, ob die Tabelle ein Feld 'Last_Updated' und wenn aktualisiert hat Damit wird dieses Feld mit der Funktion getDate() aktualisiert.Brauchen Sie Hilfe mit generischen Update-Trigger

Kann ich einen einzigen generischen Trigger wie diesen schreiben, der für alle Tabellen in meiner Datenbank funktioniert?

Danke für Ihre Zeit!

Antwort

2

Nein, Sie müssen einen Trigger für jede Tabelle haben oder Last_Updated=GETDATE in jedem UPDATE enthalten.

versuchen Sie dies:

SELECT 
    'CREATE TRIGGER [tr_u_'+TABLE_SCHEMA+'_'+TABLE_NAME+'] ON ['+TABLE_SCHEMA+'].['+TABLE_NAME+']' 
     +'AFTER UPDATE AS ' 
     +'UPDATE ['+TABLE_SCHEMA+'].['+TABLE_NAME+'] ' 
     +' SET Last_Updated=GETDATE() ' 
     +' FROM ['+TABLE_SCHEMA+'].['+TABLE_NAME+'] A ' 
     +' INNER JOIN INSERTED i ON a.pk=i.pk ' 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME='LastChgDate' --'Last_Updated' 

Diese Abfrage wird ein Create Trigger Befehl für jede Tabelle erzeugen, die eine Last_Updated Spalte hat. Sie MÜSSEN jeden Befehl bearbeiten und die a.pk=i.pk für jede Tabelle als die richtigen Spalten festlegen. Dann führe alle Befehle aus und dann hast du alle Auslöser. Sie müssen beim Hinzufügen neuer Tabellen Trigger hinzufügen.

+0

Das ist es. Vielen Dank! – Ryan

1

Sie könnten die schema_information.tables Ansicht in Ihrem Trigger interagieren und den Trigger auf alle Tabellen zuweisen, aber das ist eine hässliche Art, Dinge zu tun. Sie sollten besser einen Code-Generator schreiben, um dies für jede Tabelle zu tun, anstatt einen universellen Trigger zu haben.

+0

Zustimmen. Generika und Datenbanken vermischen sich nicht ... – gbn