【问题标题】:SQL Server 2005 The multi-part identifier "x" could not be boundSQL Server 2005 无法绑定多部分标识符“x”
【发布时间】:2012-02-16 12:18:30
【问题描述】:

我认为我遇到了语法问题,但我正在努力寻找答案......

谁能解释一下原因

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

【问题讨论】:

    标签: sql sql-server sql-server-2005 syntax


    【解决方案1】:

    因为您将Table.Column 组合在一组方括号中:

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

    这应该是:

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

    SQL Server 中的方括号用于明确表示可以包含空格或保留字的对象名称。因此,当您在一组括号内组合FacilityStates.Asset 时,您是在告诉 SQL Server 存在一个具有该名称的对象。哪个没有。

    【讨论】:

      【解决方案2】:

      这是方括号的位置:

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

      【讨论】:

        【解决方案3】:

        尝试找出方括号内的所有内容都是一个名称。您用方括号将表格和字段名称框起来。有效的查询是:

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

        【讨论】:

          猜你喜欢
          • 2022-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-23
          • 2019-01-26
          相关资源
          最近更新 更多