2010-07-21 117 views
2

我想通過SQLCMD發出以下命令:在SQLCMD查詢中使用雙引號

IF DB_ID('My_DB') IS NOT NULL DROP DATABASE My_DB 

有幾個注意事項,但...

  1. 數據庫名稱是動態如果它出現單引號內
  2. 這是運行該命令(BuildForge)將不替換可變程序

所以,我不能用:

-Q"IF DB_ID('${db_name}') IS NOT NULL DROP DATABASE ${db_name} 

,因爲它會使用文字$ {} DB_NAME在單引號。我也不能使用:

-Q"IF DB_ID("${db_name}") IS NOT NULL DROP DATABASE ${db_name} 

因爲SQLCMD在雙引號的開頭和結尾被絆倒。

我知道我可以創建一個腳本並傳入數據庫名稱的參數,但有沒有辦法在一個命令行中執行此操作,而無需腳本?任何方式來逃避雙引號等?有沒有一種BuildForge語法可以讓我正確地構建字符串?

謝謝!

回答

1

我通常使用-q和腳本來做到這一點,但有些想法...

你能做到這一點?

-Q"IF DB_ID(RTRIM(LTRIM(' ${db_name} '))) IS NOT NULL DROP DATABASE ${db_name}" 

或那樣嗎?

-Q"BEGIN TRY DROP DATABASE ${db_name} END TRY BEGIN CATCH IF ERROR_NUMBER() <> 3701 RAISERROR('some error not related to db not there', 16, 1) END CATCH" 
+0

Oooh! TRY ... CATCH可能有效。這裏的第一個命令可能會遇到同樣的問題 - BuildForge會爲$ {db_name}傳遞一個字面值,而不是將其更改爲變量值。 – 2010-07-21 18:16:56

+0

第二種方法奏效,謝謝! – 2010-07-21 20:39:43