1
我想找到一種方法來根據所使用的發佈配置文件或sqlcmd變量來更改數據庫對象。具體而言,如果我將數據庫項目部署到服務器A & B;在服務器A上我想要一個版本的存儲過程,在服務器B上我想要一個不同版本的存儲過程。由於依賴性原因,存儲過程在兩臺服務器上必須具有相同的名稱。我知道使用post部署腳本和動態sql來做到這一點的方法。我正在尋找更好的選擇。使用發佈配置文件更改部署的對象
我想找到一種方法來根據所使用的發佈配置文件或sqlcmd變量來更改數據庫對象。具體而言,如果我將數據庫項目部署到服務器A & B;在服務器A上我想要一個版本的存儲過程,在服務器B上我想要一個不同版本的存儲過程。由於依賴性原因,存儲過程在兩臺服務器上必須具有相同的名稱。我知道使用post部署腳本和動態sql來做到這一點的方法。我正在尋找更好的選擇。使用發佈配置文件更改部署的對象
我不確定它是否適合問題啓動者,但它可能有助於某人。你可以做到以下幾點:
創建變量,例如$(DeployType),並在所有發佈的configs
設置爲唯一 值改變與下面的代碼數據庫:
。
CREATE PROCEDURE p_test
AS
BEGIN
IF '$(DeployType)' = 'Production'
BEGIN
/*Your code for production database*/
END
IF '$(DeployType)' = 'Dev'
BEGIN
/*Your code for devdatabase*/
END
END
在這種情況下,它應該是你想要的。享有/功能,你可以這樣做:
CREATE VIEW v_test AS
SELECT 1
FROM table
WHERE '$(DeployType)' = 'Production'
UNION ALL
SELECT 1
FROM table2
WHERE '$(DeployType)' = 'Dev'
性能不應該減少爲優化檢查WHERE條件,看到工會的1個部分將永諾爲空,因此它不執行它。
你是什麼意思的一個更好的選擇?你已經知道這樣做的兩種方式有什麼問題? – qaphla
我想避免隱藏後部署腳本中的數據庫對象。他們的方式我知道如何去做可能不是最好的方式,所以我正在尋找替代品。 – user2690310
部分項目或任何他們現在被稱爲。使用除存儲過程之外的所有內容創建一個主項目。使用不同版本的存儲過程創建子項目,並使用包含這些對象的主proj w/option集的數據庫引用。部署子項目。看到這個更多的細節:http://sqlblog.com/blogs/jamie_thomson/archive/2013/03/10/deployment-of-client-specific-database-code-using-ssdt.aspx –