SQL Server 2005多部分标识符“;x";无法约束

SQL Server 2005多部分标识符“;x";无法约束,sql,sql-server,sql-server-2005,syntax,Sql,Sql Server,Sql Server 2005,Syntax,我想我有语法问题,但我正在努力寻找答案 有人能解释一下原因吗 SELECT TOP 3 * FROM Facilities INNER JOIN FacilityStates ON FacilityStates.Asset = Facilities.ID WHERE Facilities.ID = 'MyFacility' 编译并返回合适的结果,但我认为是完全限定的版本 SELECT TOP 3 * FROM [dbo].[Facilitie

我想我有语法问题,但我正在努力寻找答案

有人能解释一下原因吗

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”子句的左、右部分?

,因为您正在将
表组合在一起。列
在一组方括号中:

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

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

SQL Server中的方括号用于显式表示可能包含空格或保留字的对象名称。因此,当您在一组括号内组合
FacilityStates.Asset
时,您告诉SQL Server有一个具有该名称的对象。没有。这是方括号的位置:

....
ON [dbo].[FacilityStates.Asset] = [dbo].[Facilities.ID] 
....
SELECT TOP 3 * FROM [dbo].[Facilities]  
               INNER JOIN [dbo].[FacilityStates] 
               ON [dbo].[FacilityStates].[Asset] = [dbo].[Facilities].[ID] 
               WHERE [dbo].[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'