Sto apportando alcune modifiche a un'applicazione legacy costruita su SQL Server 2000, inutile dire che voglio solo fare il minimo assoluto nel timore che tutto possa crollare.INSTEAD OF UPDATE Trigger: è possibile?
Ho una grande tabella di utenti, tbUsers, con un flag BIT per IsDeleted. Voglio archiviare tutti i record attuali e futuri di IsDeleted = 1 nella tabella degli archivi tbDeletedUsers.
Lo spostamento degli utenti attualmente eliminati è semplice, tuttavia voglio un modo per spostare tutti gli utenti futuri in cui è impostato il flag IsDeleted. Potrei usare un trigger AFTER standard sulla colonna, ma ho intenzione di aggiungere alcuni vincoli alla tabella tbUser che violerebbe questo, cosa mi piacerebbe che il trigger INSTEAD OF UPDATE si attivasse e spostassi il record in una tabella di archiviazione?
Suppongo che la mia domanda sia ... è possibile attivare un trigger INSTEAD OF UPDATE sull'aggiornamento di una singola colonna? Questo è quello che ho finora:
CREATE TRIGGER trg_ArchiveUsers
INSTEAD OF UPDATE ON tbUsers
AS
BEGIN
...
END
GO
Se così un esempio (compatibile con SQL 2000) sarebbe molto apprezzato!
AGGIORNAMENTI (columnName) non esiste in SQL Server. Invece, utilizza COLUMNS_UPDATED (columnName). http://msdn.microsoft.com/en-us/library/ms186329.aspx –
Grazie per il commento. Hai ragione, non c'è la funzione UPDATES() in SQL Server, né UPDATED(), come ho scritto inizialmente. In realtà è chiamato [UPDATE()] (http://msdn.microsoft.com/en-us/library/ms187326.aspx). Modifica la mia risposta e grazie ancora per aver portato il mio errore alla mia attenzione. –
E sembra che tu abbia sbagliato anche tu, perché COLUMNS_UPDATED() non accetta un parametro. Restituisce una maschera bit che riflette tutte le colonne interessate dall'istruzione che ha invocato il trigger. Non ho mai usato quella funzione, anche se, dal manuale, penso di avere un'idea approssimativa su come usarla. –