2014-11-03 98 views
1

假設以下是我的查詢。SQLCMD - SQL Server作業

DECLARE @INT INT 
SET @INT = (SELECT COUNT(1) FROM MyTable) 
IF (@INT = 0) 
RAISERROR('Fail',16,1) 

我想使用此查詢並使用「操作系統(CmdExec)」類型創建SQL Server作業。 如果@INT <> 0,我想要SQL作業步驟成功,如果@INT = 0,則失敗。

如何編寫cmd?

我的嘗試(它不起作用)...服務器是不同於我將設置工作的地方。

sqlcmd -S 123.45.67.890 -E -V15 -d MyDB -Q "DECLARE @INT INT 
SET @INT = (SELECT COUNT(1) FROM MyTable) 
IF (@INT = 0) 
RAISERROR('Fail',16,1)" -b 

作業失敗消息。

作爲用戶執行:LocalSVR \ USER。消息105,級別15,狀態1,服務器RemoteSVR,行1未在字符串'DECLARE @INT INT'後面加上引號。處理退出代碼15.該步驟失敗。

請注意,當MyTable有1+條記錄時,該步驟因相同原因失敗。

更新:根據斯科特的建議,我改變了格式(刪除換行符),它似乎工作。 @Scott,不知道如何將你的評論標記爲答案。如果您可以寫回復,我會將其標記爲答案。乾杯!!!

+2

那是究竟如何它按照以下格式你的工作? Sqlcmd可能不喜歡讓您的查詢跨越多行。如果您刪除換行符,它可能會工作。 – 2014-11-03 21:11:08

+0

嗯......哇!認爲這是它.. ..謝謝@ScottTeibert這個提示。乾杯! – 007 2014-11-03 21:15:14

回答

0

您試圖執行多行而不是單個查詢。你可以避開,通過使用IF NOT EXISTS

SQLCMD -b -S"MyServer" -d"MyDatabase" -Q"IF NOT EXISTS(SELECT * FROM MyTable) RAISERROR('Fail',16,1)" 

注意,-b(在錯誤批處理中止)選項意味着SQLCMD本身將無法給你一個可捕獲的ErrorLevel