2016-09-14 3 views
1

zu schreiben Ich arbeite an einem Sproc, der mehrere unabhängige Select-Anweisungen ausführen muss. Also lassen Sie uns sagen, ich habe 3 Select-Anweisungen wie folgt:gibt es eine Möglichkeit, asynchrone SQL-Abfragen in SQL-Server

select * from x into #x 
select * from y into #y 
select * from z into #z 

Lassen Sie uns sagen, jede Select-Anweisung dauert 2s, um abzuschließen. Wenn ich den Sproc wie oben gezeigt ausführen würde, wäre die gesamte Abfragezeit 6s. Wenn ich jedoch die Abfragen asynchron/gleichzeitig ausführen könnte, könnte ich den Sproc in 2s gesamt ausführen. Gibt es eine Möglichkeit etwas wie dies in T-SQL zu tun ?:

select * from x into #x async 
select * from y into #y async 
select * from z into #z async 
+0

laufen kann, das ist eine interessante Konzept, aber nein, es gibt keinen Weg. –

+0

Nein, nicht im selben Fenster, wenn Sie SSMS verwenden. Sie müssen ein Fenster pro Abfrage öffnen, und jedes Fenster stellt eine andere Sitzung dar, die unabhängig von den anderen Sitzungen ausgeführt werden kann. Dies ist normalerweise kein Problem, da Abfragen im Allgemeinen von Prozessen außerhalb von SSMS wie einer Website oder einer Konsolenanwendung ausgeführt werden. Diese Anwendungen können mehrere Verbindungen öffnen und Abfragen parallel (gleichzeitig) ausführen. Daher gibt es nicht wirklich eine Nachfrage nach einem Feature wie diesem. – Igor

+2

Diese Frage steht in engem Zusammenhang mit Ihrer eigenen http://stackoverflow.com/questions/4571823/sql-server-tsql-is-it-possible-to-exec-statements-in-parallel – JsonStatham

Antwort

0

Als Transaktionsdatenbanksystem SQL Server nicht über ein Konzept der Operationen asynchron ausgeführt wird. Wenn Sie so etwas tun müssen, sollten Sie diese Logik in Ihrer Anwendungsebene durchführen.

0

Sie können, indem mehrere Aufträge asynchron ausgeführt, obwohl es Abhilfe Art und Weise ist,

siehe unten Code

EXEC msdb.dbo.sp_add_job 
    @job_name = N'Job 1' ; 

EXEC msdb.dbo.sp_add_jobstep 
    @job_name = N'Job 1', 
    @step_name = N'Load tablex', 
    @subsystem = N'TSQL', 
    @command = N'select * into tabley from y' 



EXEC msdb.dbo.sp_add_job 
    @job_name = N'Job 2' ; 

EXEC msdb.dbo.sp_add_jobstep 
    @job_name = N'Job 2', 
    @step_name = N'Load tablex', 
    @subsystem = N'TSQL', 
    @command = N'select * into tabley from y' 

Instantiate diese beiden Jobs oder Zeitplan, so dass sie asynchron

Verwandte Themen