Probelma con 'AFTER INSERT, UPDATE ' di un Trigger

lunedì 04 aprile 2011 - 09.41
Tag Elenco Tags  SQL Server 2008 R2

stena Profilo | Junior Member

Salve,
in una tabella ho un trigger AFTER affinche` quando inserisco/modifico un record,
mi aggiorni un campo data, inserendo la data attuale.

AFTER INSERT, UPDATE
AS
BEGIN
UPDATE tabella set campodata = GETDATE() WHERE ...
END

Il problema e` non sapendo a priori quale record viene aggiornato/inserito non ho i parametri per discriminare la condizione 'where'. Il 'campodata' lo devo aggiornare tramite un trigger non potendo
agire sul codice originale dell'applicativo.

Come fare ?

Grazie per eventuali suggerimenti.

lbenaglia Profilo | Guru

>Il problema e` non sapendo a priori quale record viene aggiornato/inserito
>non ho i parametri per discriminare la condizione 'where'. Il
>'campodata' lo devo aggiornare tramite un trigger non potendo
>agire sul codice originale dell'applicativo.
>
>Come fare ?

Ciao,

Puoi utilizzare le tabelle virtuali INSERTED e DELETED per conoscere lo stato delle righe modificate rispettivamente con i nuovi e vecchi valori.
A titolo di esempio prova a dare un'occhiata a questo post:
https://groups.google.com/group/microsoft.public.it.sql/msg/74f008a0b7b5e948?hl=it

Per quanto riguarda l'INSERT puoi banalmente definire un DEFAULT sulla colonna valorizzandola a GETDATE() o CURRENT_TIMESTAMP, pertanto l'after trigger può essere solamente di UPDATE.

>Grazie per eventuali suggerimenti.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

stena Profilo | Junior Member

modificato trigger, come di seguito e funziona.

AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE tabella set campodata = GETDATE()
FROM tabella AS F
JOIN INSERTED AS I
ON F.campochiave = I.campochiave
END

Ciao e grazie.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5