2009-02-23 18 views
7

È possibile eseguire un trigger CLR in SQL Server 2005 per inviare un messaggio a una coda tramite MSMQ?SQL Server Trigger - Invia messaggio alla coda

Sto utilizzando il tipo di progetto SQL Server, ma System.Messaging non viene visualizzato come riferimento che è possibile aggiungere.


Fondamentalmente ho bisogno di qualche tipo di azione che si terrà (stampa) quando una riga viene scritto nella tabella. Il dispositivo che genera la riga è uno scanner manuale che può eseguire solo operazioni di base, una delle quali è la scrittura su SQL Server su odbc. L'idea iniziale era di sondare la tabella, prendere record, stampare record, cancellare record. Questo probabilmente funzionerà bene, ma è sembrato un buon caso e una scusa per conoscere le code dei messaggi.

risposta

4

sì, è possibile.

io non lo farei in un trigger però: il TXN rimarrà aperto più a lungo, è alta intensità di risorse, cosa succede se si blocca ecc

Si può aggiornare tramite una stored procedure?

Oppure spostare una riga in una tabella di polling monitorata da un processo dell'agent SQL che scrive sulla coda?

+0

Penso che il proc memorizzato sia fattibile, ma non sono ancora sicuro del blocco stradale per accedere a System.Messaging dai progetti di SQL Server. Sto cercando su google e segnali misti - System.Messaging non è affidabile quindi SQL Server non funzionerà con esso, o è sbagliato? – anonymous

+0

Mi dispiace, non l'ho usato da solo. Hai esaminato il broker di servizi, parte di SQL Server 2005? – gbn

+0

Ne ho brevemente letto. Sono completamente ingenuo su questa roba, ma sembrava che Service Broker avrebbe lasciato che il trigger aggiungesse un messaggio a una coda di Service Broker, ma il mio programma avrebbe dovuto interrogare quella coda, ea quel punto avrei potuto anche solo interrogare la tabella. – anonymous

3

Se tale assembly non è affidabile, è comunque possibile accedervi da SQL Server: non è disponibile in modo nativo e dovrà essere importato manualmente e contrassegnato come "Untrusted" stesso. Mi sono imbattuto in questo stesso problema con System.DirectoryServices qualche tempo fa.

questo ragazzo ha la stessa domanda, come si per quanto riguarda System.DirectoryServices, ma facendo un'istruzione CREATE ASSEMBLY nello stesso modo dovrebbe consentire di accedere System.Messaging:

http://www.mydatabasesupport.com/forums/ms-sqlserver/218655-system-directoryservices-allowable-clr.html

0

Ecco alcuni nuove idee su come questo vecchio problema potrebbe essere gestita: http://nginn.org/blog/?p=376

Nginn-messagebus è il mio messaggio in coda progetto basato su SQL server e destinati a applicazioni .Net che si basano su server SQL.

Problemi correlati