2010-10-12 87 views
8

有沒有辦法通過SQLCMD判斷命令行是否定義了變量?如何判斷命令行(SQLCMD)上是否定義了變量(-v)

這裏是我的命令行:

 
sqlcmd -vDB="EduC_E100" -i"Z:\SQL Common\Admin\ProdToTest_DB.sql" 

ProdToTest_DB.sql我想設定某種條件IF檢查,如果變量不存在,如果不定義它。

 
IF NOT $(DB) 
:setvar DB "C_Q200" 
END 

我想允許腳本從命令行和SSMS內部運行。

在此先感謝。

回答

12

我在許多依賴於命令行變量的腳本中使用了以下例程的變體。這裏「DataPath」是必需的值。

DECLARE @Test_SQLCMD varchar(100) 

-- Confirm that SQLCMD values have been set (assume that if 1 is, all are) 
SET @Test_SQLCMD = '$(DataPath)' 

IF reverse(@Test_SQLCMD) = ')htaPataD($' 
    -- SQLCMD variables have not been set, crash and burn! 
    RAISERROR('This script must be called with the required SQLCMD variables!', 20, 1) with log 
+3

這是我見過的最糟糕的事情。不是解決方案,請注意,但需要它。 – FLGMwt 2015-01-15 15:37:42

+1

哦,還有很多這樣糟糕,更糟的是。 – 2015-01-15 18:40:34

+0

這不是問題的答案。這隻會檢查您是否正在SQLCMD模式下運行腳本。 – kjbartel 2016-02-05 05:26:19

0

你可以用try catch語句完成你想要的。只要在try中訪問你的一個變量,如果它產生一個錯誤,就在catch中定義它們。

+0

SQL TRY ... CATCH不會捕獲SQLCMD錯誤。 SQLCMD處理器在執行SQL語句之前工作,所以無論如何,TRY ... CATCH執行之前都會發生錯誤。 – DaveBoltman 2018-03-08 13:21:21

相關問題