Trigger su database diversi

venerdì 07 novembre 2008 - 14.45

Teech Profilo | Expert

Salve a tutti.
Ho la seguente fattispecie: degli utenti usano un gestionale che scrive i propri dati su un DB in SQL2005EE. Gli utenti inseriscono degli ordini cliente ed io devo creare delle procedure che lavorano appunto sugli ordini. Il problema è che quando gli utenti trasformano gli ordini in movimenti di magazzino (DDT, Fatture accompagnatorie, ecc...) gli ordini vengono cancellati dalla relativa tabella del database e spostati in un'altra attraverso delle logiche del gestionale.
Per lavorare sugli ordini pensavo di generarmi dei trigger che in fase di Insert ed in fase di Update delle tabelle del gestionale operavano una copia dei dati (copia parziale dei dati) su un database diverso (sempre in SQL2005EE). Questo ovviamente considerando il fatto che posso inserire i miei trigger nel database del gestionale (se posso farlo "monitorando" dal mio database i dati del database del gestionale sarebbe ottimo).

Premetto che non ho mai fatto un trigger in vita mia e quindi ho problemi anche a reperire informazioni (non so cosa cercare esattamente) vi chiedo se è possibile creare un trigger che scrive su un database diverso da quello che contiene il trigger stesso (potrebbe essere un database anche su un'istanza diversa o addirittura su un server diverso). Se è possibile (e non ho pensato ad una boiata pazzesca), potete darmi una dritta su che documentazione cercare e dove orientarmi? (qualche parola chiave da mettere in Google o nella ricerca dei BOL).

Grazie!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

lbenaglia Profilo | Guru

>Per lavorare sugli ordini pensavo di generarmi dei trigger che
>in fase di Insert ed in fase di Update delle tabelle del gestionale
>operavano una copia dei dati (copia parziale dei dati) su un
>database diverso (sempre in SQL2005EE). Questo ovviamente considerando
>il fatto che posso inserire i miei trigger nel database del gestionale
>(se posso farlo "monitorando" dal mio database i dati del database
>del gestionale sarebbe ottimo).

Ciao Maurizio,

Direi che la soluzione che proponi può andare bene dato che immagino che gli inserimenti e le modifiche agli ordini non siano tali da compromettere le prestazioni dell'applicativo a causa della presenza dei triggers (che ti ricordo mantengono aperta la transazione per tutta la loro durata).

Definisci un nuovo db sulla medesima istanza, definisci uno user account abbinato alla login utilizzata dall'applicativo per accedere al suo db, definisci le tabelle che ti servono, assegna le permission allo user account (eventualmente rendilo dbo) e richiama tali tabelle nei triggers utilizzando il three-part name (database.schema.tabella).

>Premetto che non ho mai fatto un trigger in vita mia e quindi
>ho problemi anche a reperire informazioni (non so cosa cercare
>esattamente) vi chiedo se è possibile creare un trigger che scrive
>su un database diverso da quello che contiene il trigger stesso
>(potrebbe essere un database anche su un'istanza diversa o addirittura
>su un server diverso). Se è possibile (e non ho pensato ad una
>boiata pazzesca), potete darmi una dritta su che documentazione
>cercare e dove orientarmi? (qualche parola chiave da mettere
>in Google o nella ricerca dei BOL).

Beh, direi che "trigger" è la parola da cercare
http://msdn.microsoft.com/en-us/library/ms189799.aspx

>Grazie!!!
Prego.

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

Teech Profilo | Expert

Intanto grazie
Da quello che ho capito posso lavorare in questo modo solo utilizzando DB che si trovano sulla stessa istanza ed utilizzare il three part name (per me più che sufficiente adesso). Se volessi però usare istanze diverse o server diversi allora devo comunque utilizzare i trigger ma integrando delle chiamate al CLR o utilizzare i linked server, giusto?

Per sapere cosa cercare era dettato semplicemente dal fatto che non avevo trovato nulla per i trigger su DB diversi (tutti esempi e disquisizioni sugli stessi DB), ma la soluzione è sempre quella più semplice... Mi piace complicarmi la vita anche se non lo faccio apposta

Grazie mille ancora!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5