2010-08-09 96 views
12

我們使用的是Visual Studio Database Professional,它大量使用SQLCMD變量來部署時區分不同的環境。是否可以在腳本中自動強制執行SQLCMD模式?

我知道有幾個指令可用於設置上下文(如:連接服務器名稱)。腳本本身是否有強制執行SQLCMD模式的方法?我們的部署過程的一部分是讓DBA檢查並執行腳本,這將是一個很好的安全網(所以我不必提醒他們將其執行模式設置爲SQLCMD)。

+0

+1正在尋找類似的解決方案。有沒有發現如何做到這一點? – 2010-11-12 16:17:58

+0

不,還在等。我很猶豫開始賞金。 – 2011-02-14 20:49:28

回答

4

不是一個解決方案,但作爲解決方法,您可以在一些警告中嵌入您的腳本。 This post啓發我對此代碼:

SET NOEXEC OFF; -- previous execution may have toggled it 
:setvar IsSqlCmdEnabled "True" 
GO 
IF ('$(IsSqlCmdEnabled)' = '$' + '(IsSqlCmdEnabled)') 
BEGIN 
    PRINT('Use SqlCmd-mode!!'); 
    SET NOEXEC ON; 
    -- RAISERROR ('This script must be run in SQLCMD mode.', 20, 1) WITH LOG 
END 
ELSE 
BEGIN 
    PRINT('Using SqlCmd-mode') 
    -- insert the code you really want to execute: 
    -- ... 
END 
SET NOEXEC OFF; -- do not disable next execution in this session 
+0

我知道這是遲到了,但對於將來發現這一點的其他人:VS2010發佈腳本基本上做到了這一點(他們設置了一個特殊的'__IsSqlCmdEnabled' var然後立即檢查它的值),但他們還將SET NOEXEC ON作爲一個添加安全措施以防止腳本中的其他內容運行。 – 2013-01-21 15:44:37

+0

@Micheal,謝謝你的提示,我加了'NOEXEC'。 (未測試,此時沒有SqlServer,但看起來很簡單。) – 2013-01-25 09:00:03

+0

僅適用於第一次運行 – Paul 2013-05-09 08:29:32

0

這似乎不可能。我甚至檢查了SSMS項目模式。

但是,如果您在BIDS中創建數據庫項目,則預部署&後部署腳本默認以SQLCMD模式運行。

我知道這不是你想要的答案,但它是最好的,我可以給你沒有創造一個自定義的SSMS插件,將基於腳本文件中的一些文本爲你做。

相關問題