2016-03-23 82 views
0

此刻,我部署到服務器,並部署的一部分,從Visual Studio發佈時,調用腳本,將用戶添加到組:Visual Studio中 - 部署數據庫 - 數據庫參數

ALTER ROLE [geodeveloper] ADD MEMBER [OTWGEODI01\GEO Application Developers]; 

我使用的服務器稱爲OTWGEODI01

不過,我創建了一個新的發佈配置文件指向OTWGEODI02 - 但上面的腳本失敗,因爲現在有成員OTWGEODI01\GEO Application Developers

有沒有一種方法,我可以甲肝e作爲發佈的一部分,在腳本中更改此值的參數?

我試圖添加屬性到我的數據庫解決方案,但添加一個名爲ServerName的cariable。我將它設置爲'OTWGEODI02'。然後我去到了直接引用服務器名稱我的劇本之一:

ALTER ROLE [geodeveloper] ADD MEMBER [OTWGEODI01\GEO Application Developers]; 

,取而代之的是:

ALTER ROLE [geodeveloper] ADD MEMBER [[$(ServerName)\GEO Application Developers]; 

但它告訴我,我有一個無效的語法附近「\」

你能看到我犯的一個錯誤嗎?另外,每次我需要發佈到不同的環境時,我都需要去更新數據庫屬性?或者可以以某種方式基於我正在使用的.publish文件。 (我有一個每個數據庫.publish文件)。也許我可以用一個發佈文件結束,並以某種方式選擇解決方案配置並在那裏添加我的環境?

編輯:

結果在發佈錯誤說:

SQL72014:.net SqlClient數據提供:消息15401,級別16,狀態1, 線1的Windows NT用戶或組「( $ ServerName)\ GEO Application Developers'not found。再次檢查名稱。

CREATE USER [($ServerName)\GEO Application Developers] FOR LOGIN [($ServerName)\GEO Application Developers]; 

它似乎沒有替換變量...

另外:

CREATE USER [$(ServerName)\GEO Application Developers] FOR LOGIN [$(ServerName)\GEO Application Developers]; 

結果內置時間錯誤,說我不能把參數在這裏。

回答

0

您可以在項目屬性中定義變量(在SQLCMD變量選項卡中定義一個新變量)。然後你可以在你的腳本中使用這個變量(比如[$(ServerName)])。
發佈時,您可以根據您希望發佈到的服務器來設置不同的值。

+0

謝謝@Amit - 我只是試過,但得到一個奇怪的錯誤。我根據你的回答更新了我的問題。 – Craig

+0

這是在你的代碼中丟失的''''。 – AKS

+0

再次想到,您還可以使用系統變量「@@ SERVERNAME」來獲取服務器名稱。然後你需要建立你的sql查詢並執行它(我認爲是動態查詢)。 – AKS