2013-08-16 41 views
1

我想找到一種方法來根據所使用的發佈配置文件或sqlcmd變量來更改數據庫對象。具體而言,如果我將數據庫項目部署到服務器A & B;在服務器A上我想要一個版本的存儲過程,在服務器B上我想要一個不同版本的存儲過程。由於依賴性原因,存儲過程在兩臺服務器上必須具有相同的名稱。我知道使用post部署腳本和動態sql來做到這一點的方法。我正在尋找更好的選擇。使用發佈配置文件更改部署的對象

+0

你是什麼意思的一個更好的選擇?你已經知道這樣做的兩種方式有什麼問題? – qaphla

+0

我想避免隱藏後部署腳本中的數據庫對象。他們的方式我知道如何去做可能不是最好的方式,所以我正在尋找替代品。 – user2690310

+2

部分項目或任何他們現在被稱爲。使用除存儲過程之外的所有內容創建一個主項目。使用不同版本的存儲過程創建子項目,並使用包含這些對象的主proj w/option集的數據庫引用。部署子項目。看到這個更多的細節:http://sqlblog.com/blogs/jamie_thomson/archive/2013/03/10/deployment-of-client-specific-database-code-using-ssdt.aspx –

回答

0

我不確定它是否適合問題啓動者,但它可能有助於某人。你可以做到以下幾點:

  1. 創建變量,例如$(DeployType),並在所有發佈的configs

  2. 設置爲唯一 值改變與下面的代碼數據庫:

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個部分將永諾爲空,因此它不執行它。

相關問題