Sql-Server
使用功能更新時的遠端掃描
為什麼通過連結伺服器更新時使用 ISNULL() 使用遠端掃描檢索所有行並在本地過濾而不是通過遠端查詢過濾?
UPDATE LINKEDSERVER1.database1.dbo.table1 WITH(ROWLOCK) SET number = ISNULL(number,0) WHERE accounts = '123' UPDATE LINKEDSERVER1.database1.dbo.table1 WITH(ROWLOCK) SET number = number WHERE accounts = '123'
該表確實為accounts 列提供了一個非聚集唯一索引,但是在accounts 列上沒有使用ISNULL(),並且該索引應該仍然可用。我在這裡錯過了什麼嗎?
我在這裡錯過了什麼嗎?
並不真地。您會發現分佈式查詢處理有很多像這樣的棘手限制。
因此,使用連結伺服器的經驗法則是,如果您想要遠端執行,則始終使用直通查詢。
exec ( ' UPDATE database1.dbo.table1 WITH(ROWLOCK) SET number = ISNULL(number,0) WHERE accounts = ''123'' ' ) at LINKEDSERVER1
這只是一個猜測,很可能只是沒有允許
ISNULL(number,0)
推送到遠端伺服器的轉換。