星期五, 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 啦

沒有留言:

張貼留言