Avviare codice .NET all'interno di un Trigger

mercoledì 25 gennaio 2012 - 17.33

sandroid Profilo | Newbie

Buonasera, sto lavorando su un database in SQL Server come DBA; i miei colleghi mi hanno fatto una richiesta particolare che non ho mai provato a fare. Mi spiego meglio: per verificare quando in una tabella viene fatto un update o un insert è stata creata una classe in C# su Visual Studio 2010 che si occupa di fare il polling sul DB per controllare a determinati intervalli di tempo l'evento. Ora per evitare questo spreco inutile di risorse mi è stato chiesto se posso inserire io un trigger in update\insert che possa scatenare un evento all'esterno di sql server.
Mi sono documentato un pò ovunque (principalmente su MSDN) e ho trovato diverse possibili soluzioni:
- implementazione di codice CLR all'interno del trigger. (Ma può effettivamente eseguire anche istruzioni esterne al db come quelle di cui ho bisogno io?)
- creazione di un service broker.
Se qualcuno può darmi anche solo un consiglio in merito ne sarei molto grato perché non ho la minima idea di quale strategia adottare.

Saluti,
Sandro Santucciu

alx_81 Profilo | Guru

>Buonasera, sto lavorando su un database in SQL Server come DBA;
>i miei colleghi mi hanno fatto una richiesta particolare che
>non ho mai provato a fare. Mi spiego meglio: per verificare quando
>in una tabella viene fatto un update o un insert è stata creata
>una classe in C# su Visual Studio 2010 che si occupa di fare
>il polling sul DB per controllare a determinati intervalli di
>tempo l'evento.
oddio.........

>Ora per evitare questo spreco inutile di risorse
>mi è stato chiesto se posso inserire io un trigger in update\insert
>che possa scatenare un evento all'esterno di sql server.
>Mi sono documentato un pò ovunque (principalmente su MSDN) e
>ho trovato diverse possibili soluzioni:
>- implementazione di codice CLR all'interno del trigger. (Ma
>può effettivamente eseguire anche istruzioni esterne al db come
>quelle di cui ho bisogno io?)
>- creazione di un service broker.
>Se qualcuno può darmi anche solo un consiglio in merito ne sarei
>molto grato perché non ho la minima idea di quale strategia adottare.
change data capture, secondo me è il top: http://msdn.microsoft.com/it-it/library/bb522489(v=sql.100).aspx
solo che non hai messo il tag della versione di sql server.. se non hai 2008 c'è da seguire altre vie..

>Saluti,
ciao

--
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

sandroid Profilo | Newbie

Grazie per la risposta si è vero sono un pò sbadato mi sono dimenticato di dire che sono su SQL Server 2008 R2.
Comunque ho scoperto che non erano a conoscenza del fatto che un trigger implicasse una transazione, così l'idea del trigger è tramontata; è rimasta quella del service broker oppure il classico polling com'è ora, oppure il Change Data Capture (che è la prima volta che lo sento nominare).
Grazie e scusate per gli errori ma sto fondendo!!

alx_81 Profilo | Guru

>Grazie per la risposta si è vero sono un pò sbadato mi sono
>dimenticato di dire che sono su SQL Server 2008 R2.
>Comunque ho scoperto che non erano a conoscenza del fatto che
>un trigger implicasse una transazione, così l'idea del trigger
>è tramontata; è rimasta quella del service broker oppure il classico
>polling com'è ora, oppure il Change Data Capture (che è la prima
>volta che lo sento nominare).
>Grazie e scusate per gli errori ma sto fondendo!!
ma che errori? figurati.. il change data capture agisce a basso livello e ti traccia i cambiamenti sui record.
Si tratta di una funzionalità molto potente e nel tuo caso credo sia proprio l'utilizzo perfetto!
Facci sapere l'esperienza, visto che è ancora così poco usato e i più nemmeno sanno che esiste
--
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