星期五, 5月 07, 2021

[SQL] 本機伺服器

在 product 上發現一個不存在的 Linked Server,有一隻 Store Procedure 是在 remote 上透過 Linked Server 把資料送回 product,但被同事改為在 product 上透過 Linked Server 把 remote 資料拉回來,看到語法時 remote 和 product 都是用四部分名稱,但 Lniked Server 清單內明明就只有 remote 而已,最訝異的這正常執行很長一段時間,手動執行也是正常的
INSERT INTO ProductServerName.DBName.SchemaName.TableName (ColList)
SELECT ColList
FROM RemoteServerName.DBName.SchemaName.TableName
研究發現,原來以前放在 remote 上時的 Linked Server 取名跟 product 名稱是一樣的,移轉回來後同事也沒有特別把 product 的四部份名稱修正,所以在 product 上用四部分名稱讀取 product 本身資料,完全沒想過可以這樣用
 
sys.servers 官方文件上找到 server_id 說明
When server_id = 0, the returned value is the server name.
When server_id > 0, the returned value is the local name of linked server.

 從 sys.servers 可以查到本機,is_linked = 0

[SQL] 本機伺服器-1

透過四部份名稱存取自身資料

[SQL] 本機伺服器-2 

該案例打破一個觀念,不是用四部分名稱存取就是 Linked Server 啦

沒有留言:

張貼留言