Ich mache ein paar Änderungen an einer Legacy-Anwendung, die auf SQL Server 2000 gebaut wurde, unnötig zu sagen, dass ich nur das absolute Minimum in der Angst machen will, dass es einfach alles auseinander fallen kann.INSTEAD OF UPDATE Trigger - ist das möglich?
Ich habe eine große Tabelle von Benutzern, TbUsers, mit einem BIT-Flag für IsDeleted. Ich möchte alle aktuellen und zukünftigen IsDeleted = 1 Benutzerdatensätze in meine Archivtabelle tbDeletedUsers archivieren.
Verschieben der derzeit gelöschten Benutzer ist einfach, aber ich möchte eine Möglichkeit, alle zukünftigen Benutzer verschieben, wo das IsDeleted Flag gesetzt ist. Ich könnte einen Standard-AFTER-Trigger für die Spalte verwenden, jedoch beabsichtige ich, der tbUser-Tabelle einige Einschränkungen hinzuzufügen, die dies verletzen würden, was ich für meinen INSTEAD OF UPDATE-Trigger möchte und stattdessen den Record in die Archiv-Tabelle verschiebe?
Ich denke, meine Frage ist ... ist es möglich, einen INSTEAD OF UPDATE-Trigger auf das Update einer einzelnen Spalte auszulösen? Dies ist, was ich bisher habe:
CREATE TRIGGER trg_ArchiveUsers
INSTEAD OF UPDATE ON tbUsers
AS
BEGIN
...
END
GO
Wenn so ein Beispiel (SQL 2000 kompatibel) würde sehr geschätzt werden!
UPDATES (columnName) ist in SQL Server nicht vorhanden. Verwenden Sie stattdessen COLUMNS_UPDATED (columnName). http://msdn.microsoft.com/en-us/library/ms186329.aspx –
Vielen Dank für den Kommentar. Sie haben recht, es gibt keine UPDATES() -Funktion in SQL Server, noch UPDATED(), wie ich anfangs geschrieben habe. Es heißt eigentlich [UPDATE()] (http://msdn.microsoft.com/en-us/library/ms187326.aspx). Bearbeiten meiner Antwort und nochmals Danke, dass ich meinen Fehler bemerkt habe. –
Und Sie scheinen auch falsch zu sein, denn COLUMNS_UPDATED() akzeptiert keinen Parameter. Es gibt eine Bitmaske zurück, die alle Spalten widerspiegelt, die von der Anweisung betroffen sind, die den Trigger aufgerufen hat. Ich habe diese Funktion nie benutzt, obwohl ich aus dem Handbuch eine ungefähre Vorstellung davon habe, wie man sie benutzt. –