Führen Sie eine Konsolenanwendung von SQL server nach dem Tabellenaktualisierungsauslöser asynchronous aus?

Ich habe Schwierigkeiten mit der search nach dem besten path, um meine Frage zu lösen, bitte im Auge behalten Ich bin offen für bessere Möglichkeiten, um diese Aufgabe zu gehen.

Was ich tun muss, ist, nachdem ein Zeilenwert in meinem Tisch aktualisiert ist, muss ich 2 Felder aus dieser Tabelle als Parameter für eine Konsolenanwendung verwenden. Im Moment kann ich dies erreichen, indem xp_cmdshell einen Trigger auf den Tisch setzt und dann xp_cmdshell , um die Anwendung mit den Parametern auszuführen. Allerdings muss ich dies asynchronous tun, damit meine gespeicherte Prozedur nicht hängt, während es wartet, bis die Konsolenanwendung beendet ist.

Vielleicht gehe ich das falsch herum.

Ich verwende SQL server 2008

EDIT – Die Antwort von Andriy M scheint das Beste zu sein, aber wie in den Kommentaren erwähnt, brauche ich einen path, um dies geschehen zu lassen "Sofort". Ist es möglich, einen Job von einem SP oder einem Trigger aufzurufen? oder vielleicht ein anderer path, um ein ähnliches Ergebnis zu erzielen?

Danke für die Hilfe jeder.

EDIT – ich wähle, er antworte unten, weil es mir geholfen hat, die meisten zu einer besseren Lösung zu kommen. Was ich am Ende tue, war ein Job zu erstellen, der gerade meine Tabelle gegen einen anderen abfragt, der die aktualisierten Zeilen verfolgt. dann, wenn ich die Zeilen habe, die ich aktualisieren muss, benutze ich xp_cmdshell, um meine Anwendung mit den angegebenen Parametern auszuführen. diese lösung scheint bislang reibungslos zu funktionieren.

Es besteht ein weiterer Nachteil, dass Sie Ihre Anwendung direkt aus dem Auslöser laufen lassen. Es hat mit der Tatsache zu tun, dass im Allgemeinen mehr als eine Zeile aktualisiert werden kann. Um dies in deinem Auslöser zu berücksichtigen, müssten Sie wahrscheinlich eine loop über die aktualisierten Zeilen organisieren und die Anwendung für jeden einzeln ausführen. Cursors sind in der Regel als ein letzter Ausweg, und die in einem Trigger noch mehr so.

In einer solchen Situation würde ich höchstwahrscheinlich erwägen, einen SQL Agent-Job zu erstellen, der die aktualisierten Werte aus einer dedizierten Tabelle, die von einem Trigger gefüllt wurde, lesen würde. Der Job müsste noch einen Cursor verwenden, denke ich, aber dein Trigger würde nicht, und der Hauptpunkt ist, dass die Anwendung der Anwendung aus dem Job nicht aufhören, Ihre wichtigsten Arbeitsprozess.

In deinem Trigger eine Nachricht auf eine Service Broker-Warteschlange für jede Zeile, die aktualisiert wurde. Schreiben Sie eine gespeicherte Prozedur, die Nachrichten aus der Warteschlange verarbeitet. Legen Sie die gespeicherte Prozedur als aktivierte gespeicherte Prozedur für die Warteschlange fest.

Ich denke, du solltest eine erweiterte gespeicherte Prozedur (DLL) entwickeln, anstatt eine Konsolenanwendung mit xp_cmd_shell aufzurufen.

Ich würde vorschlagen, mit einem CLR-Verfahren, da es Ihnen viel mehr Kontrolle über den process. Aber das kannst du mit xp_cmdshell .

Um dies zu tun, können Sie eine Batch-file schreiben, die Sie mit xp_cmdshell . In der Batchdatei starten Sie die Konsolenanwendung mit den richtigen Parametern mit dem Befehl START . Dies wird Ihren process asynchronous ausschalten. Die Batchdatei und der Aufruf von xp_cmdshell werden sofort zurückgegeben.