Sql-Server

存在於連結伺服器的表上,給出錯誤 4104

  • January 23, 2020

我正在比較不同伺服器上的兩個表,我正在執行的查詢如下所示:

Select top 100 *
From [ServerA].[MyDB].[dbo].[Table1]
   Where Exists( Select * from [ServerB].[TheirDB].[dbo].[TableA1]
   Where [ServerA].[MyDB].[dbo].[Table1].[foo] = [ServerB].[TheirDB].[dbo].[TableA1].[bar])

這不起作用並拋出錯誤 4104

$$ ServerB $$.$$ TheirDB $$.$$ dbo $$.$$ TableA1 $$.$$ bar $$即使 bar 是有效的列並且

Select * from [ServerB].[TheirDB].[dbo].[TableA1]

工作正常

發生 4104 錯誤是因為您在 where 子句中使用了 5 部分命名。

例如:

SELECT TOP 100 *
FROM [ServerA].[MyDB].[dbo].[Table1]
WHERE [ServerA].[MyDB].[dbo].[Table1].[foo]=5;

會拋出錯誤:

Msg 4104, Level 16, State 1, Line 17
The multi-part identifier "[ServerA].[MyDB].[dbo].[Table1].[foo]"  could not be bound.

解決方案:使用別名

SELECT top 100 *
FROM [ServerA].[MyDB].[dbo].[Table1] AS T1
WHERE Exists( SELECT * FROM [ServerB].[TheirDB].[dbo].[TableA1] AS T2
             WHERE T1.[foo] = T2.[bar]);

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