2012-01-23 34 views
3

我想我有一個語法問題,但我在努力尋找答案...SQL Server 2005中的多部分標識符「X」無法綁定

任何人都可以解釋爲什麼

SELECT TOP 3 * FROM Facilities 
     INNER JOIN FacilityStates 
     ON FacilityStates.Asset = Facilities.ID 
     WHERE Facilities.ID = 'MyFacility' 

編譯並返回一個合適的結果,但我認爲是完全合格的版本

SELECT TOP 3 * FROM [dbo].[Facilities] 
       INNER JOIN [dbo].[FacilityStates] 
       ON [dbo].[FacilityStates.Asset] = [dbo].[Facilities.ID] 
       WHERE [dbo].[Facilities.ID] = 'MyFacility' 

拋出「多部分組成的標識符‘X’無法綁定。」對'on'子句和'where'子句的左側和右側部分?

回答

3

因爲要結合你的Table.Column在一組方括號中:

.... 
ON [dbo].[FacilityStates.Asset] = [dbo].[Facilities.ID] 
.... 

這應該是:

.... 
ON [dbo].[FacilityStates].[Asset] = [dbo].[Facilities].[ID] 
.... 

在SQL Server方括號是用來明確表示對象名稱,可以包含空格或成爲保留字。因此,當您在一組括號內組合FacilityStates.Asset時,您告訴SQL Server有一個具有該名稱的對象。哪些沒有。

1

這是你方括號的位置:

SELECT TOP 3 * FROM [dbo].[Facilities] 
       INNER JOIN [dbo].[FacilityStates] 
       ON [dbo].[FacilityStates].[Asset] = [dbo].[Facilities].[ID] 
       WHERE [dbo].[Facilities].[ID] = 'MyFacility' 
1

揣摩方括號內的一切是一個名字。您將方括號表和字段名稱框在一起。有效查詢爲:

SELECT TOP 3 * 
FROM [dbo].[Facilities] 
INNER JOIN [dbo].[FacilityStates] 
    ON [dbo].[FacilityStates].[Asset] = [dbo].[Facilities].[ID] 
WHERE [dbo].[Facilities].[ID] = 'MyFacility' 
相關問題