有沒有辦法通過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內部運行。
在此先感謝。
有沒有辦法通過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內部運行。
在此先感謝。
我在許多依賴於命令行變量的腳本中使用了以下例程的變體。這裏「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
你可以用try catch語句完成你想要的。只要在try中訪問你的一個變量,如果它產生一個錯誤,就在catch中定義它們。
SQL TRY ... CATCH不會捕獲SQLCMD錯誤。 SQLCMD處理器在執行SQL語句之前工作,所以無論如何,TRY ... CATCH執行之前都會發生錯誤。 – DaveBoltman 2018-03-08 13:21:21
這是我見過的最糟糕的事情。不是解決方案,請注意,但需要它。 – FLGMwt 2015-01-15 15:37:42
哦,還有很多這樣糟糕,更糟的是。 – 2015-01-15 18:40:34
這不是問題的答案。這隻會檢查您是否正在SQLCMD模式下運行腳本。 – kjbartel 2016-02-05 05:26:19