SQL-Server (TSQL) - Ist es möglich die EXEC-Anweisungen parallel?
SQL Server 2008 R2
Hier ist ein Vereinfachtes Beispiel:
EXECUTE sp_executesql N'PRINT ''1st '' + convert(varchar, getdate(), 126) WAITFOR DELAY ''000:00:10'''
EXECUTE sp_executesql N'PRINT ''2nd '' + convert(varchar, getdate(), 126)'
Die erste Anweisung setzt das Datum und die Verzögerung 10 Sekunden, bevor Sie fortfahren.
Die zweite Aussage sollte sofort drucken.
Weg T-SQL arbeitet, die 2. Anweisung nicht ausgewertet werden, bis die erste abgeschlossen ist. Wenn ich kopieren und einfügen, um eine neue Abfrage-Fenster, es wird sofort ausgeführt.
Das Problem ist, dass ich andere, komplexere Dinge auf, mit Variablen, die übergeben werden müssen, um beide Verfahren.
Was ich versuche zu tun ist:
- Ein Rekord
- Sperre für einen Zeitraum von Zeit
- während es gesperrt ist, führen einige andere Aussagen gegen diesen Datensatz und die Tabelle selbst
Vielleicht gibt es einen Weg, um dynamisch erstellen Sie ein paar Arbeitsplätze?
Sowieso, ich bin auf der Suche nach einem einfachen Weg, dies zu tun, ohne manuell die PRINT-Anweisung und kopieren/einfügen, um eine weitere Sitzung.
Gibt es eine Möglichkeit, EXEC, ohne warten /parallel?
- Die Dynamik bei der Technik kann gut für die Ausführung von SQL-asynchron.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist ein Weg, siehe Asynchrone Verfahren-Ausführung.
Jedoch, die Chancen sind, das ist nicht das, was Sie brauchen. T-SQL ist eine data access Sprache, und wenn Sie berücksichtigen, Transaktionen, locking und commit/rollback Semantik ist fast unmöglich haben einen parallelen job. Parallel T-SQL arbeitet zum Beispiel mit Anfragen Warteschlangen, wobei jede der Anfragen ist unabhängig und es gibt keine Korrelation zwischen jobs.
Was Sie beschreiben, klingt gar nicht wie etwas, das kann oder sollte, eigentlich paralellized.
sp_executesql
für server-side-Ausführung oder mit der:!
sqlcmd-Erweiterung (SSMS unterstützt Sie auch, wenn aktiviert) für client-side-Ausführung. Ein Befehl, den Sie ausführen können, iststart
, die einen Prozess starten und nicht auf die Fertigstellung zu warten. So können Sie ausführensp_executesql 'start sqlcmd -E -S. -d dbname -i "myscript.sql"';
und erreichen einer "second-thread'. Genau so, wie wenn Sie aus einem anderen SSMS Abfrage-Fenster, aber automatisiert. Eine Sache, die Sie verlieren einen Fehler/das Ergebnis aus dem Skript starten.Wenn Sie möchten, einen Datensatz zu sperren, so dass Sie ausführen können, Aussagen gegen, können Sie zum ausführen dieser Anweisungen als Transaktion.
Ausführen der SQL-parallel, müssen Sie paralellize SQL-Aufrufe, durch die Ausführung Ihrer SQL-from-innerhalb eines separaten threads/Prozesse, die in Java, C++, perl oder anderen Programmiersprachen (die Hölle, das starten von "isql" in shell-script im hintergrund arbeiten)
Könnte es sich lohnen, zu überprüfen, die Artikel Asynchrone T-SQL-Ausführung Ohne Service Broker.
Falls Sie nach der Lektüre alle oben genannten, über mögliche Probleme und Sie immer noch wollen, um die Dinge laufen parallel, können Sie wahrscheinlich versuchen, die sql-jobs, stellen Ihre Anfragen in verschiedenen jobs, führen Sie dann durch den Aufruf der Arbeitsplätze, wie Sie diese
SQL-Agent-Aufträge können parallel ausgeführt werden, und erstellt direkt aus TSQL. Die Antwort von Remus Rusanu enthält einen link, der dies erwähnt, zusammen mit einige Nachteile.
Ein weiterer Nachteil ist, dass zusätzliche Sicherheits-Berechtigungen sind erforderlich, um den Auftrag zu erstellen. Auch für die Umsetzung von unten, die die Aufgabe ausführen müssen, als ein bestimmter Benutzer+login mit zusätzliche job-management-Privilegien.
Ist es möglich, die beliebige SQL-als ein anderer (sicherer) Benutzer, aber ich glaube, es erfordert sysadmin-Berechtigungen festlegen, um die Arbeit als solche.
Den zurückgegebenen @pJobIdHexOut kann verwendet werden, um halt den job, wenn nötig.