即使所有内容都是唯一的,也无法绑定多部分标识符

时间:2018-07-06 08:36:25

标签: sql sql-server identifier

所以我遇到了IntelliSense错误,我不知道为什么。我已经将所有内容重命名为使用别名,并且已经准备好在多部分标识符上可以使用的所有功能,这似乎表明它不是唯一的?但是对于别名,它似乎是唯一的,尽管在许多表中都引用了“ MachineID”

这是我的查询

SELECT DISTINCT TOP 1000 
a.Name00,
a.UserName00,
a.Domain00,
a.TotalPhysicalMemory00,
a.Manufacturer00,
a.Model00,
a.MachineID,
a.SystemType00,
b.MACAddress00,
b.ServiceName00,
c.System_OU_Name0,
d.Name0,
e.Model00

FROM 
[dbo].[Computer_System_DATA] AS a,
[dbo].[v_RA_System_SystemOUName] AS c,
[dbo].[v_GS_PROCESSOR] AS d,
[dbo].[Disk_DATA] AS e

INNER JOIN  [dbo].[Network_DATA] AS b ON  b.MachineID=a.MachineID
WHERE 
b.MACAddress00 IS NOT NULL AND b.ServiceName00 LIKE '%express'

错误显示在第22行的a.MachineID

我想念什么?另外,如果我注释掉以下内容,错误就会消失;

--c.System_OU_Name0,
--d.Name0,
--e.Model00


--[dbo].[v_RA_System_SystemOUName] AS c,
--[dbo].[v_GS_PROCESSOR] AS d,
--[dbo].[Disk_DATA] AS e

我们非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Dmitrij Kultasev正是这个问题的发源地。显式联接首先发生。因此,目前,INNER JOIN在eb之间; acd不在该ON子句的范围内-因此,错误(没有a)及其注释时起作用的原因更改加入顺序(现在意味着您正在加入ab

修复您的查询以消除旧的逗号联接语法-这是距今超过25年的历史了!

SELECT DISTINCT TOP 1000 
a.Name00,
a.UserName00,
a.Domain00,
a.TotalPhysicalMemory00,
a.Manufacturer00,
a.Model00,
a.MachineID,
a.SystemType00,
b.MACAddress00,
b.ServiceName00,
c.System_OU_Name0,
d.Name0,
e.Model00

FROM 
[dbo].[Computer_System_DATA] AS a
    INNER JOIN --?--
[dbo].[v_RA_System_SystemOUName] AS c
    ON
       --?-- What links a and c together?
    INNER JOIN  --?--
[dbo].[v_GS_PROCESSOR] AS d
    ON
       --?-- What links d to the combination of a and c?
    INNER JOIN --?--
[dbo].[Disk_DATA] AS e
    ON
       --?-- What links e to the combination of a, c and d?

INNER JOIN  [dbo].[Network_DATA] AS b ON  b.MachineID=a.MachineID
WHERE 
b.MACAddress00 IS NOT NULL AND b.ServiceName00 LIKE '%express'

当然,例如,如果您想更改连接的执行顺序, ac之间的链接实际上是通过d


  

即使所有内容都是唯一的,也无法绑定多部分标识符

问题标题确实没有意义。指出“无法绑定多部分标识符”的错误通常意味着您在某处使用的名称的一部分在该位置根本不可用 -与多个定义无关。通常,这会在“多次指定关联名称'<x>'”的行中产生错误。