Sql-Server

INSERT INTO SQL Server : 連結伺服器沒有以半完全限定名稱指定數據庫

  • November 17, 2019

我有一個名為的伺服器DEV、一個名為的數據庫Nus12345、一個名為的連結伺服器SnapshotDev、一個名為的架構Snapshot和一個名為的表SnapshotPersonEmployee

在 DEV 伺服器上,還有許多其他數據庫。在連結伺服器上,有與 DEV 上相同的數據庫。

現在我有一個儲存過程插入到表中

INSERT INTO Snapshot.SnapshotPersonEmployee

相反,我們在概念上希望更改為通過使用插入到連結伺服器上的表中

INSERT INTO [SnapshotDev].[Nus12345].[Snapshot].[SnapshotPersonEmployee]

我的問題是,我可以在不更改儲存過程的情況下插入連結伺服器上的表嗎?有沒有一種方法(比如製作同義詞)可以引用連結伺服器上的表

INSERT INTO Snapshot.SnapshotPersonEmployee

編輯

我應該補充一點,這個儲存過程在每個數據庫上出現一次,這就是為什麼我想嘗試在不更改儲存過程的情況下這樣做。通過不命名數據庫,它允許我們保留一個版本的儲存過程——每個數據庫上都有一個 SP,但它們都是相同的。

我們正在考慮SnapshotPersonEmployee從所有數據庫中刪除目前 (DEV) 伺服器中的表。這會幫助/阻礙任何可能的解決方案嗎?

是的你可以。使用 SQL synonyms https://msdn.microsoft.com/en-us/library/ms187552(v=sql.105).aspx

通過這樣做,您將完全控制窗簾後,但請完整記錄並保持一致。使用同義詞對數據庫進行故障排除是一場噩夢。

作為替代方案,您可以使用動態 SQL,它可能更透明。

如果您願意刪除/重命名原始表,則可以創建一個具有相同名稱但指向連結伺服器的視圖。

因此,您的視圖將在快照數據庫中(但請列出您的列):

CREATE VIEW [Snapshot].[SnapshotPersonEmployee] AS 

SELECT * FROM [SnapshotDev].[Nus12345].[Snapshot].[SnapshotPersonEmployee]

然後,您可以像插入任何其他表格一樣插入其中。這也可以讓您避免同義詞,正如 Slava Murygin 指出的那樣,這些同義詞可能難以解決。

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