Trigger update[SQL 2005]

lunedì 23 febbraio 2009 - 12.28

tankian Profilo | Junior Member

Ciao, devo creare un trigger che all'evento INSERT mi faccia un UPDATE tra campi della stessa tabella. Praticamente all'evento insert, inserisco dati su deu campi e un campo mi resta vuoto. Ecco, devo "passare" il valore tra loro gerarchicamente e lasciare un campo vuoto.
Avevo pensato di fare una cosa del genere:


CREATE TRIGGER tr on dbo.articoli FOR INSERT AS BEGIN UPDATE TABLE.dbo.articoli set campo1 = campo2, campo2 = campo3, campo3 = '' END

Non mi da errore ma non funziona. Suggerimenti?

Grazie per eventuali risposte!


lbenaglia Profilo | Guru

>Non mi da errore ma non funziona. Suggerimenti?
Posta un esempio completo con la strutturra della tabella (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il result set finale che vuoi ottenere con quei dati.

>Grazie per eventuali risposte!
Prego.

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

tankian Profilo | Junior Member

in effetti rileggendo non c'ho capito niente neanch'io eheh

>Posta un esempio completo con la strutturra della tabella (CREATE TABLE)
CREATE TABLE TABLE1 ID int IDENTITY(1,1) NOT NULL, campo1 varchar(50) COLLATE Latin1_General_CI_AS NULL, campo2 varchar(50) COLLATE Latin1_General_CI_AS NULL, campo3 varchar(50) COLLATE Latin1_General_CI_AS NULL, CONSTRAINT [PK_TABLE1] PRIMARY KEY CLUSTERED ( [ID] ASC )

>alcune righe di prova (INSERT INTO)
CAMPO1 | CAMPO2 | CAMPO3 | -ND- | latte | cereali | -ND- | latte | cereali |


> ed il result set finale che vuoi ottenere con quei dati.
CAMPO1 | CAMPO2 | CAMPO3 | latte | cereali | | latte | cereali | |




lbenaglia Profilo | Guru

>>alcune righe di prova (INSERT INTO)
>
>CAMPO1 | CAMPO2 | CAMPO3 |
>-ND- | latte | cereali |
>-ND- | latte | cereali |

Cos'è "-ND-"?
Puoi cortesemente postare i comandi di INSERT?

>> ed il result set finale che vuoi ottenere con quei dati.
>
>CAMPO1 | CAMPO2 | CAMPO3 |
> latte | cereali | |
>latte | cereali | |
In base a quale azione vorresti ottenere questo result set?

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

tankian Profilo | Junior Member

Non li avevo postati perchè l'insert avviene tramite un import con BULK INSERT. Importa quella struttura che ho postato..dovrebbe essere una sorta di "passaggio di valori" da un campo ad un altro

tankian Profilo | Junior Member

>In base a quale azione vorresti ottenere questo result set?

questa frase mi ha fatto riflettere, infatti facendo un semplicissimo insert il trigger funziona!!

....ma allora BULK INSERT non è un'azione che risponde ad un evento!?

lbenaglia Profilo | Guru

>>In base a quale azione vorresti ottenere questo result set?
>
>questa frase mi ha fatto riflettere, infatti facendo un semplicissimo
>insert il trigger funziona!!
Indipendentemente dal numero di righe inserite, quel trigger agisce in modo indiscriminato su TUTTE le righe della tabella.
A me sembra errato, ma senza i dati che ti ho chiesto non sono in grado di saperlo


>....ma allora BULK INSERT non è un'azione che risponde ad un
>evento!?
Per attivare i trigger con le operazioni bulk logged (altamente sconsigliato dato che perderesti i vantaggi prestazionali offerti da tali operazioni), devi specificarlo espressamente.
Il comando BULK INSERT prevede l'opzione FIRE_TRIGGERS che scatena i triggers di INSERT al termine di ogni batch.
http://msdn.microsoft.com/en-us/library/ms187640.aspx

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

tankian Profilo | Junior Member

scusami Lorenzo, non ho capito cosa ti serve per poter analizzare meglio la situazione

[edit]
ps: con FIRE_TRIGGER ha funzionato!
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5