Sql-Server

SSDT 將多個引用的數據庫項目發佈到新實例

  • September 2, 2018

我正在經歷將我們現有的 SQL Server 數據庫導入 Visual Studio 2015 中的 SQL Server Data Tools 的過程,目的是將它們置於版本控制之下。

在將具有循環引用的數據庫拆分為複合項目後,我的解決方案中的所有數據庫項目都會正確建構。我現在的問題是嘗試將它們全部部署到一個新實例,發布失敗,因為被引用的數據庫不存在,例如

SQL72014:.Net SqlClient 數據提供程序:消息 208,級別 16,狀態 1,過程 Foo,第 13 行無效的對象名稱“DB1.dbo.Bar”。

如果我嘗試部署 DB1,那麼它與引用另一個尚未創建的數據庫相同

SQL72014:.Net SqlClient 數據提供者:消息 208,級別 16,狀態 1,過程欄,第 64 行無效的對象名稱“DB2.dbo.Foo”

如何解決此問題,以便將解決方案中的所有數據庫項目發佈到新實例?

通過執行以下操作,我已經能夠在我的解決方案中獲取所有數據庫以進行發布:

  • Project Properties > Debug在我的解決方案中為每個項目設置正確的連接字元串和發布選項。
  • 分配多個啟動項目Solution Properties
  • 然後調試解決方案將按正確的順序建構/部署所有數據庫

雖然這感覺不是實現這一目標的正確方法,因為它現在意味著如果我想發佈到不同的伺服器,我需要修改我的所有項目。

幾年前我遇到過類似的問題,我最終通過將給定數據庫帶入一個具有不同模式的單一數據庫來解決這些依賴關係,因為過去它們被毫無意義地分割。所以我更正了這一點,這讓我可以為所有對象使用 sql 程式碼,順便說一下,這些對像已被同一個應用程序使用,並且有一個 Lot 或引用作為一個數據庫項目。

或者重新考慮允許項目之間引用的方向並重新組織它們。

另一個選項可能是從建構過程中排除那些跨數據庫邊界引用其他對象的腳本。

另外,讓我想知道的是:如果您按照您所說的解決所有循環引用並且現在有一個複合項目,那麼您現在不應該將項目部署到一個數據庫嗎?Afaik 複合項目將所有對象組合到單個數據庫。在那種情況下,我猜你沒有為項目中的所有數據庫名稱/用法使用數據庫 SQLCMD 變數。您的程式碼應如下所示:

select * from [$(DatabaseDB1)].dbo.TableName

引用自:https://dba.stackexchange.com/questions/168608