簡體   English   中英

使用批處理文件調用順序SQL Agent作業,但是如果其中一個作業失敗,如何結束該過程?

[英]Using a batch file to call sequential SQL Agent jobs, but how do I end the process if one of the jobs fails?

我正在使用批處理文件來調用順序SQL Agent作業。 該部分工作正常,但是我當前的挑戰是,當其中一個SQL Agent作業失敗時,我需要停止該過程。

業務需求:

步驟1:調用SQLAgentJob1在DBServer上運行。 如果SQLAgentJob1失敗,則該批處理腳本應退出(不調用其他步驟)。 如果SQLAgentJob1成功,則調用SQLAgentJob2。

步驟2:調用SQLAgentJob2在DBServer上運行。 如果SQLAgentJob2失敗,則該批處理腳本應退出(不調用其他步驟)。 如果SQLAgentJob2成功,則調用RunMe.cmd。

步驟3:調用RunMe.cmd以在WebServer上運行

步驟4:調用SQLAgentJob3在DBServer上運行。 如果SQLAgentJob3失敗,則該批處理腳本應退出。 如果SQLAgentJob3成功,則此批處理腳本應退出。

當前狀態

我已使用批處理文件成功調用了每個SQL Agent作業和命令行任務,但是如果任何一個SQLAgentJob失敗,我都會試圖停止該過程。 現在,即使SQLAgentJob1失敗,該批處理文件仍會調用SQLAgentJob2。

這是當前的腳本:

ECHO starting SQLAgentJob1
sqlcmd -S DBServer -E -d MSDB -Q "sp_start_job 'SQLAgentJob1'"


ECHO starting the SQL job
sqlcmd -S DBServer -E -d MSDB -Q "sp_start_job 'SQLAgentJob2'"
ECHO OFF
ECHO.

set CMDDIR = D:\webapps
pushd CMDDIR
call RunMe.cmd
popd

ECHO starting SQLAgentJob1
sqlcmd -S DBServer -E -d MSDB -Q "sp_start_job 'SQLAgentJob3'"

同樣,非常具有挑戰性的是,即使SQL Agent作業失敗,作為該作業的批處理文件的一部分返回的%errorlevel%也為0(而不是1)。

有什么想法/建議嗎? 理想的世界,我想繼續使用批處理腳本(部分原因是未在Web服務器上安裝SQL,並且需要從Web服務器調用.cmd並運行SQL Agent作業),盡管這是不可能的,或者太難了,我可以改成其他東西。

在此先感謝您的幫助,如果我使用了錯誤的術語,請原諒我。

我通過簡單的搜索發現SQLCMD的返回值

使用sqlcmd -b參數可以輕松解決此問題(未經測試)。

ECHO starting SQLAgentJob1
sqlcmd -S DBServer -E -d MSDB -b -Q "sp_start_job 'SQLAgentJob1'"
if errolevel 1 exit /b

ECHO starting the SQL job
sqlcmd -S DBServer -E -d MSDB -b -Q "sp_start_job 'SQLAgentJob2'"
if errorlevel 1 goto :EOF
ECHO OFF
ECHO.

set CMDDIR = D:\webapps
pushd CMDDIR
call RunMe.cmd
popd

ECHO starting SQLAgentJob1
sqlcmd -S DBServer -E -d MSDB -Q "sp_start_job 'SQLAgentJob3'"

或者,如果在使用-V時指定的X級錯誤發生,則在-b之外另外使用-VX選項退出批處理文件。

ECHO starting SQLAgentJob1
sqlcmd -S DBServer -E -d MSDB -V 11 -b -Q "sp_start_job 'SQLAgentJob1'"
if errolevel 1 exit /b

ECHO starting the SQL job
sqlcmd -S DBServer -E -d MSDB -V 11 -b -Q "sp_start_job 'SQLAgentJob2'"
if errolevel 1 goto :EOF
ECHO OFF
ECHO.

set CMDDIR = D:\webapps
pushd CMDDIR
call RunMe.cmd
popd

ECHO starting SQLAgentJob1
sqlcmd -S DBServer -E -d MSDB -Q "sp_start_job 'SQLAgentJob3'"

請讓我們知道最有效的方法,我將相應地編輯答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM