TRIGGER UPDATE da oracle a SQL Server

venerdì 11 maggio 2012 - 15.50
Tag Elenco Tags  SQL Server 2008 R2  |  SQL Server 2008  |  SQL Server 2005  |  SQL Server 2000  |  SQL Server Express  |  Oracle 11g  |  Oracle 10g

gsflash80 Profilo | Junior Member

Buonasera a tutti, è da qualche giorno sto provando a capire il perchè non funge sull create trigger update:
ad esempio in oracle ho usato in questo modo che funziona:

create or replace TRIGGER @db_user.ModCountDocInMngrTbl BEFORE Update ON @db_user.DPA_OGGETTI_CUSTOM FOR EACH ROW WHEN (new.repertorio != old.repertorio Or new.cha_tipo_tar != old.cha_tipo_tar) Declare idTipologia number; BEGIN -- Eliminazione dei riferimenti del repertorio dall'anagrafica DeleteRegistroRepertorio(:new.system_id); Select ta.system_id Into idTipologia From @db_user.dpa_tipo_atto ta Inner Join @db_user.dpa_ogg_custom_comp occ On ta.system_id = occ.id_template Where occ.id_ogg_custom = :new.system_id; -- Se è stato cambiato lo stato del flag repertorio, viene ed è stato passato -- ad 1, viene eseguito l'inserimento di un riferimento nell'anagrafica If :new.repertorio = '1' Then @db_user.InsertRegistroRepertorio(idTipologia, :new.system_id, :new.cha_tipo_tar, 'D'); End If; End; /

e ho tradotto in SQL server:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e l'errore mi restituisce:
Msg 4104, Level 16, State 1, Procedure ModCountDocInMngrTbl, Line 37
The multi-part identifier "old.repertorio" could not be bound.
Msg 4104, Level 16, State 1, Procedure ModCountDocInMngrTbl, Line 37
The multi-part identifier "old.cha_tipo_tar" could not be bound.

ho girato un pò nella rete e non sto più capendo... :-(
Grazie

----

..:: GSFLASH ::..
http://www.gsflash.it
http://blogs.dotnethell.it/gabrieleserpi/
MCTS - ACP - OCP - ECDL - ACSP
Ubuntu 11.04/OpenSuse 10.3
Vista Seven/MacOSX SnowLeopard

alx_81 Profilo | Guru

>Buonasera a tutti, è da qualche giorno sto provando a capire
>il perchè non funge sull create trigger update:
ciao

intanto mi sembra che nello script ORACLE ci sia un Before Update mentre quello di sql è After..
Magari non è quello che ti serve, oppure va bene comunque ma fai attenzione perchè l'evento secondo me viene lanciato prima..

>e l'errore mi restituisce:
>Msg 4104, Level 16, State 1, Procedure ModCountDocInMngrTbl,
>Line 37
>The multi-part identifier "old.repertorio" could not be bound.
>Msg 4104, Level 16, State 1, Procedure ModCountDocInMngrTbl,
>Line 37
>The multi-part identifier "old.cha_tipo_tar" could not be bound.
old non è alias di nulla, quindi immagino che sia un sinonimo di DELETED, che è la speciale tabellina creata al volo per il trigger, per i dati che stanno per essere eliminati o sostituiti..
prova con DELETED.

>Grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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