sobota, 19 marca 2011

Zmiana zawartości rekordu podczas UPDATEa w Transact-SQL

Nie tak dawno miałem pewne problemy, jak zmienić zawartość pola rekordu w tabeli, podczas jego aktualizacji. Pola, które nie jest aktualizowane.
Chodziło o to, aby w czasie zmiany pola BITowego z wartości 0 na 1, pole typu DateTime, zmieniało swoją zawartość, na datę wykonania tej zmiany.
Pomoc otrzymałem na stackoverflow.com - swoją drogą dziwne, że nie wpadłem na tak oczywiste rozwiązanie:
create trigger tr_U_YourTable
on YourTable
for Update
as
begin
    if update(true_false)
        update yt
            set date = getdate()
            from Inserted i
                inner join Deleted d
                    on i.ID = d.ID
                inner join YourTable yt
                    on i.ID = yt.ID
            where coalesce(i.true_false,0) <> coalesce(d.true_false,0)
end

Autorem rozwiązania jest Joe Stefanelli.
Rozwiązanie wykorzystuje tabele Inserted i Deleted występujące w T-Sql.

Brak komentarzy:

Prześlij komentarz