Google Gruppi non supporta più i nuovi post o le nuove iscrizioni Usenet. I contenuti storici continuano a essere visibili.

Aiuto trigger

53 visualizzazioni
Passa al primo messaggio da leggere

Mago Merlino

da leggere,
5 giu 2003, 11:12:4405/06/03
a
Devo creare un trigger che inserisca un record in una tabella per ogni
INSERT o UPDATE.
In pratica mi serve per loggare tutte le modifiche che vengono fatte su una
tabella. Quindi sia che venga inserito un nuovo record, sia che ne venga
modificato uno esistente, devo inserire un nuovo record nella tabella del
log.
Qualcuno sa aiutarmi?
Grazie.


Luca Bianchi

da leggere,
5 giu 2003, 11:22:0305/06/03
a
===============================
CREATE TRIGGER nometrigger ON Tabella
FOR INSERT, UPDATE
AS

istruzioni_da_eseguire
===============================

Ciao...

--
Luca Bianchi
Microsoft MVP - SQL Server


"Mago Merlino" <magomer...@Mfreehtml.it> wrote in message
news:R5JDa.1964$hf2.1...@news.edisontel.com...

Mago Merlino

da leggere,
5 giu 2003, 11:41:2505/06/03
a
> CREATE TRIGGER nometrigger ON Tabella
> FOR INSERT, UPDATE
> AS
>
> istruzioni_da_eseguire

Ma è proprio questo il mio problema. Non ho capito cosa eseguire.

Dovrei fare una
INSERT INTO LogTabella (Campo1) VALUES ...

Cosa?
Devo prendere i valori da inserted o updated?

Grazie.


Lorenzo Benaglia

da leggere,
5 giu 2003, 11:44:0305/06/03
a

Ciao Mago Merlino,

credo che la cosa migliore sia quella di proporti un esempio concreto.
Nella tabella dbo.StudentsLog andrò a memorizzare il nome dell'utente che ha
inserito/modificato un utente nella tabella dbo.Students e la data
dell'ultima modifica.

USE tempdb
GO

/* Creo la tabella dbo.Students */
CREATE TABLE dbo.Students(
StudentID int NOT NULL IDENTITY PRIMARY KEY,
FirstName varchar(20) NOT NULL,
LastName varchar(20) NOT NULL
)
GO

/* Creo la tabella dbo.StudentsLog */
CREATE TABLE dbo.StudentsLog(
StudentID int NOT NULL,
InsertedBy varchar(20) NULL,
UpdatedBy varchar(20) NULL,
LastModify datetime NOT NULL
)
GO

/* Creo il trigger di insert dbo.trI_Students */
CREATE TRIGGER dbo.trI_Students
ON dbo.Students
FOR INSERT
AS
INSERT dbo.StudentsLog(StudentID, InsertedBy, LastModify)
SELECT I.StudentID, SYSTEM_USER, GETDATE()
FROM Inserted I
GO

/* Creo il trigger di update dbo.trU_Students */
CREATE TRIGGER dbo.trU_Students
ON dbo.Students
FOR UPDATE
AS
UPDATE dbo.StudentsLog
SET UpdatedBy = SYSTEM_USER,
LastModify = GETDATE()
FROM dbo.StudentsLog S JOIN Inserted I
ON S.StudentID = I.StudentID
GO

/* Inserisco un nuovo studente */
INSERT dbo.Students VALUES('Lorenzo', 'Benaglia')
GO

/* Verifico i log */
SELECT *
FROM dbo.StudentsLog
GO

/* Aggiorno la mia riga */
UPDATE dbo.Students
SET FirstName = 'Luca'
WHERE FirstName = 'Lorenzo'
GO

/* Verifico i log */
SELECT *
FROM dbo.StudentsLog
GO

/* Pulizia */
DROP TABLE dbo.Students, dbo.StudentsLog


Per maggiori informazioni leggi il paragrafo "CREATE TRIGGER"
URL:tsqlref.chm::/ts_create2_7eeq.htm sui Books Online.

> Grazie.
Prego.

Ciao!

--
Lorenzo Benaglia


Microsoft MVP - SQL Server

UGIdotNET - http://www.ugidotnet.org
UGISS - http://www.ugiss.org


Luca Bianchi

da leggere,
5 giu 2003, 11:49:4905/06/03
a
La tabella UPDATED non esiste...
Nel corso di una istruzione di aggiornamento, sono visibili, all'interno di
un trigger, sia la tabella INSERTED che la tabella DELETED. La prima
contiene i nuovi dati che saranno presenti al termine dell'aggiornamento e
l'altra contiene i vecchi dati, quelli che saranno sostituiti
dall'aggiornamento.
Pertanto la tua "istruzione_da_eseguire" può essere

=================
INSERT LogTabella
SELECT *
FROM INSERTED
=================

Ciao...

--
Luca Bianchi
Microsoft MVP - SQL Server


"Mago Merlino" <magomer...@Mfreehtml.it> wrote in message

news:LwJDa.2015$hf2.1...@news.edisontel.com...

Mago Merlino

da leggere,
5 giu 2003, 11:52:0205/06/03
a
> La tabella UPDATED non esiste...

Grazie mille ragazzi. Era questo il mio dubbio.
Ciao.


0 nuovi messaggi