Sql-Server
INSERT INTO SQL Server : 連結伺服器沒有以半完全限定名稱指定數據庫
我有一個名為的伺服器
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 指出的那樣,這些同義詞可能難以解決。