Sql-Server
存在於連結伺服器的表上,給出錯誤 4104
我正在比較不同伺服器上的兩個表,我正在執行的查詢如下所示:
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]);