SSDT 數據庫引用中的“OtherServer”如何工作?
我想創建一個 SSDT 數據庫項目,該項目應該部署在具有多個連結伺服器到其他伺服器的 Sql Server 上。這些遠端伺服器上的數據庫(“MyBusinessDB”)位於另一個 SSDT 解決方案中,因此我將其命名為“MyBusinessDB.dacpac”。
由於我們可以添加對其他數據庫或 DACPAC 文件的引用以正確引用數據庫對象,因此我想添加 MyBusinessDB.dacpac 作為對我的項目的引用。
Peter Schott的這篇文章解釋了有關添加數據庫引用的基礎知識。
也可以定義引用的數據庫駐留在“其他/不同的伺服器”上。
我引用了 MyBusinessDB.dacpac 文件並將其配置為在“同一台伺服器”上。可以使用它的模式對象並在 Sql 程式碼中引用它們。
但是由於我想在遠端伺服器上使用這個數據庫,所以我需要提前添加一個連結伺服器名稱。連結伺服器名稱應該是可變的,因為有多個實例。不幸的是,一旦我將數據庫引用配置在另一個/不同的伺服器上,Visual Studio 就無法驗證引用的 MyBusinessDB.dacpac 文件的架構對象。
我嘗試了不同的語法,以及參考創建對話框本身的建議語法(範例/建議在此視窗底部可見):
SELECT * FROM [$(OtherServer)].[$(MyBusinessDB)].[Schema1].[Table1]
我天真的期望是它被理解為:“我知道你的意思,你通過變數“MyBusinessDB”引用 MyBusinessDB.dacpac 並告訴我你想在“OtherServer”上使用它,你將用一個值填充稍後的…”
但是使用它我也會得到編譯器錯誤。dacpac 的模式永遠不會被解析。
由於我只是引用了完全相同的 dacpac 文件並在其前面添加了另一個變數(伺服器名),為什麼這無法正確讀取 dacpac 的架構?應該如何正確使用這個“功能”?
我只是在本地嘗試過,它解決得很好,還抱怨一列不存在。
檢查您的參考屬性我已經突出顯示了四個部分名稱中使用的屬性。
您必須將數據庫引用更改為“不同的數據庫,不同的伺服器”。您的設置是為同一伺服器配置的,因此它只需要 3 個部分,而不是 4 個部分到對象參考。
如果您需要在數據庫駐留的伺服器方面具有更大的靈活性,您可以使用同義詞。