Ich habe mehrere SQL Server Agent-Jobs, die nacheinander ausgeführt werden sollen. Um einen guten Überblick über die Jobs zu erhalten, die ausgeführt werden sollen, habe ich einen Hauptjob erstellt, der die anderen Jobs mit einem Aufruf an aufruft EXEC msdb.dbo.sp_start_job N'TEST1'
. Der sp_start_job
Vorgang wird sofort beendet (Job Schritt 1), aber dann möchte ich, dass mein Hauptjob wartet, bis der Job TEST1
beendet ist, bevor ich den nächsten Job anrufe.
Also habe ich dieses kleine Skript geschrieben, das direkt nach dem Aufruf des Jobs ausgeführt wird (Jobschritt 2) und den Hauptjob zwingt, zu warten, bis der Unterjob beendet ist:
WHILE 1 = 1
BEGIN
WAITFOR DELAY '00:05:00.000';
SELECT *
INTO #jobs
FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;',
'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'',
@execution_status = 0, @job_aspect = N''JOB''');
IF NOT (EXISTS (SELECT top 1 * FROM #jobs))
BEGIN
BREAK
END;
DROP TABLE #jobs;
END;
Das funktioniert gut genug. Aber ich hatte das Gefühl, dass intelligentere und / oder sicherere ( WHILE 1 = 1
?) Lösungen möglich sein sollten.
Ich bin neugierig auf folgende Dinge und hoffe, dass Sie mir einige Einblicke geben können:
- Was sind die Probleme bei diesem Ansatz?
- Können Sie einen besseren Weg vorschlagen, dies zu tun?
(Ich habe diese Frage zuerst bei StackOverflow gestellt , weil ich mich auf die Verbesserung des Codes konzentriert habe. Immer noch gültig. Aber ich vermute, dass die Leute hier im Allgemeinen klügere Dinge zu sagen haben, warum ich nicht versuchen sollte, dies so zu tun, wie ich es tue. ' Ich mache es jetzt oder biete gute Alternativen.)
EDIT (25. Juli)
Anscheinend ist an meinem Skript nicht allzu viel falsch, da nur wenige Antworten auf Probleme hinweisen :-) Die Alternative zu dieser Art von Skripten scheint darin zu bestehen, ein Tool zu verwenden, das für diese Skripte entwickelt wurde Aufgaben (wie SQL Sentry Event Manager oder ...) - oder ein solches Tool selbst zu schreiben. Wir werden ein solches Tool in meiner derzeitigen Firma nicht kaufen, daher bleibe ich vorerst beim Skript.