2017-09-04 26 views
0

我有一個數據庫項目的一些意見。數據庫項目視圖中的動態變量

視圖應根據發佈到的環境而有所不同。

發佈到開發環境時,INNER JOIN應爲目標模式名稱使用​​特定的前綴,並在測試環境中使用另一個前綴。

有沒有可能做到這一點?在下面的代碼片段中,id喜歡在本地開發時以及發佈到開發環境時使用Hub,以及在發佈時測試ISA。

例子:

CREATE VIEW [ISA].[v_CoveredRisk] 
    AS SELECT 
       CR.Bkey_CoveredRisk_Unique 
       ,CO.Bkey_Coverage_Unique 
       ,CO.Name 
       ,PO.EKey_Policy 
       ,CoObj.Bkey_CoveredObject 
       ,CoObj.BKey_Building 
       ,CoObj.Bkey_Home 
       ,CoObj.BKey_Object 
       ,CoObj.BKey_Person 
       ,CoObj.BKey_Pet 
       ,CoObj.BKey_Vehicle 
       ,Risk_Excess 
       ,Risk_Sum 
       ,CAST(CurrentYearPremiumAmount AS float) AS CurrentYearPremiumAmount 
       ,IsActive 
       ,PO.BKey_Policy 
       ,CR.Record_Timestamp 

    FROM Hub.[CoveredRisk] CR 
    INNER JOIN Hub.Coverage CO ON CR.EKey_Coverage = CO.EKey_Coverage 
    INNER JOIN Hub.CoveredObject CoObj ON CR.EKey_CoveredObject = CoObj.EKey_CoveredObject 
    INNER JOIN Hub.[Policy] PO ON CR.EKey_Policy = PO.Ekey_Policy 
+0

如何從.NET執行SQL查詢? –

+0

我不從.NET執行SQL查詢 - 我通過右鍵單擊並選擇目標數據庫來發布項目。我希望發佈到開發和測試時視圖的內容稍有不同,如果可能的話。 – Kenci

+0

@Kenci您可能會通過選擇更合適的標籤來獲得更好的答案,似乎與C#沒有任何關係,無論您創建或使用數據庫的方式如何。 –

回答

0

的第一件事是,你應該刪除這個要求,並讓代碼在所有數據庫相同。您幾乎100%保證在某個時候出現錯誤,並部署在其他環境中無法使用的內容。

如果你確實想這樣做,你可以用同義詞來做 - 在你的視圖中引用一個同義詞並指向相應的模式。你不能一個模式中得到的代名詞直接指向一個模式,但也可以將對象,如果您有:

  • 開發表devSchema.table
  • 督促表prodSchema.table

dev的,有這樣一個代名詞:

create synonym Hub.table for devSchema.table

那麼你的觀點參考Hub.table,它會被解析爲dev的表。

0

您要的模板生成的SQL腳本

T4模板找出你正在運行的環境,以避免...創建輸出相應

找出您需要生成輸出的環境,查看發佈配置文件和配置特定變量(在項目的構建屬性中也稱爲「條件編譯符號」)

您可以探測T4模板中的那些

0

您不能在模式或對象名稱中使用變量。如果你真的想實現你說的話,我可以建議你2種方式:

  1. 你不會有變量控制它,但你會與發佈配置控制它。您可以在sqlproj文件中使用條件語句。所以,我創建了2個視圖:

    CREATE VIEW [HUB]。[View1] AS SELECT 1 as one;

    CREATE VIEW [ISA]。[View1] AS SELECT 1 as one;

然後在sqlproj文件我以下的事情:

<Build Include="View1.sql" /> 
<None Include="View1.sql" Condition=" '$(Configuration)' == 'Debug'" /> 
<None Include="View1_1.sql" /> 
<Build Include="View1_1.sql" Condition=" '$(Configuration)' == 'Release' " /> 

然後就是挑選合適的版本配置在部署 enter image description here

注意:您需要包含和排除相同的文件從構建到實現。

  1. 這是非常簡單的方法。始終使用相同的方式創建視圖,並將其移動到發佈腳本中的適當模式。例如:

    IF DB_NAME()=「開發」 EXEC sp_rename ....