Diese alte Frage verdient eine umfassendere Antwort. Einige davon werden hier in anderen Antworten / Kommentaren erwähnt, andere funktionieren möglicherweise für die spezifische Situation von OP oder nicht, aber möglicherweise auch für andere, die gespeicherte Prozesse asynchron aus SQL aufrufen möchten.
Nur um ganz ausdrücklich: TSQL tut nicht (selbst) haben die Fähigkeit , asynchron andere TSQL Operationen zu starten .
Das bedeutet nicht, dass Sie noch nicht viele Optionen haben:
- SQL Agent-Jobs : Erstellen Sie mehrere SQL-Jobs und planen Sie sie entweder für die Ausführung zum gewünschten Zeitpunkt oder starten Sie sie asynchron von einem gespeicherten "Master-Control" -Prozess aus
sp_start_job
. Wenn Sie ihren Fortschritt programmgesteuert überwachen müssen, stellen Sie einfach sicher, dass die Jobs jeweils eine benutzerdefinierte JOB_PROGRESS-Tabelle aktualisieren (oder überprüfen Sie, ob sie die undokumentierte Funktion, xp_sqlagent_enum_jobs
wie in diesem hervorragenden Artikel von Gregory A. Larsen beschrieben, bereits verwendet haben). Sie müssen so viele separate Jobs erstellen, wie Sie möchten, dass parallele Prozesse ausgeführt werden, auch wenn sie denselben gespeicherten Prozess mit unterschiedlichen Parametern ausführen.
- SSIS-Paket : Erstellen Sie für komplexere asynchrone Szenarien ein SSIS-Paket mit einem einfachen Ablauf für Verzweigungsaufgaben. SSIS startet diese Aufgaben in einzelnen Spids, die SQL parallel ausführt. Rufen Sie das SSIS-Paket von einem SQL Agent-Job aus auf.
- Benutzerdefinierte Anwendung : Erstellen Sie eine einfache benutzerdefinierte Anwendung in der Sprache Ihrer Wahl (C #, Powershell usw.), und verwenden Sie dabei die von dieser Sprache bereitgestellten asynchronen Methoden. Rufen Sie für jeden Anwendungsthread einen gespeicherten SQL-Prozess auf.
- OLE-Automatisierung : Verwenden Sie in SQL
sp_oacreate
und sp_oamethod
, um einen neuen Prozess zu starten, der sich gegenseitig gespeicherte Prozesse aufruft, wie in diesem Artikel beschrieben , ebenfalls von Gregory A. Larsen.
- Service Broker : Sehen Sie sich Service Broker an , ein gutes Beispiel für die asynchrone Ausführung in diesem Artikel .
- CLR-Parallelausführung : Verwenden Sie die CLR-Befehle
Parallel_AddSql
und Parallel_Execute
wie in diesem Artikel von Alan Kaplan beschrieben (nur SQL2005 +).
- Geplante Windows-Aufgaben : Der Vollständigkeit halber aufgeführt, aber ich bin kein Fan dieser Option.
Wenn ich es wäre, würde ich wahrscheinlich in einfacheren Szenarien mehrere SQL Agent-Jobs und in komplexeren Szenarien ein SSIS-Paket verwenden.
In Ihrem Fall klingt das Aufrufen von SQL Agent-Jobs nach einer einfachen und verwaltbaren Wahl.
Ein letzter Kommentar : SQL versucht bereits, einzelne Operationen zu parallelisieren, wann immer dies möglich ist *. Dies bedeutet, dass das gleichzeitige Ausführen von zwei Aufgaben anstelle von zwei Aufgaben nacheinander keine Garantie dafür ist, dass die Aufgabe früher abgeschlossen wird. Testen Sie sorgfältig, ob es tatsächlich etwas verbessert oder nicht.
Wir hatten einen Entwickler, der ein DTS-Paket erstellt hat, um 8 Aufgaben gleichzeitig auszuführen. Leider war es nur ein 4-CPU-Server :)
* Vorausgesetzt, Standardeinstellungen. Dies kann durch Ändern des Maximalgrads der Parallelität oder der Affinitätsmaske des Servers oder durch Verwenden des MAXDOP-Abfragehinweises geändert werden.