我的查询包含一些JOIN
语句和一对相同的列名。在尝试解决此问题时,我现在收到以下错误
Msg 4104,Level 16,State 1,Line 3
多部分标识符" v_parametersets.NAME"无法受约束。Msg 4104,Level 16,State 1,Line 4
多部分标识符" catalog.NAME"无法受约束。
以下是查询:
SELECT
startedon,
endedon,
v_parametersets.name As Parameter,
catalog.name As Category,
status,
numberprocessed,
errormessage
FROM
Prod.dbo.status ps
INNER JOIN
Prod.dbo.v_parametersets vps ON bps.parametersetid = vps.parametersetid
INNER JOIN
Prod.dbo.catalog pc ON ps.catalogid = pc.id
WHERE
ps.endedon BETWEEN Dateadd(hh, -3, Sysdatetime()) AND Sysdatetime()
因此,表name
上有一个名为catalog
的列,而name
上有一列名为v_parametersets
的列。我需要这两个,但多部分标识符由于某种原因不能被绑定。
答案 0 :(得分:3)
由于您对表进行了别名,因此在描述所选列/字段名称时必须使用别名,因为编译器已经对表进行别名并且不再具有表名,所以您无法引用表名了解原始表名。由于连接已完成并且连接已使用别名创建的临时存储解析,因此该名称基本上已超出范围。
换句话说,您告诉系统在步骤1中将Prod.dbo.v_parametersets的名称更改为VPS。 在步骤4中,您引用了在步骤1中更改的对象的名称。系统不再知道该名称(对于此查询的范围),您更改了它!
SELECT startedon,
endedon,
VPS.name As Parameter, <--This line
PC.name As Category, <--This line
status,
numberprocessed,
errormessage
FROM Prod.dbo.status ps
INNER JOIN Prod.dbo.v_parametersets vps
ON bps.parametersetid = vps.parametersetid
INNER JOIN Prod.dbo.catalog pc
ON ps.catalogid = pc.id
WHERE ps.endedon BETWEEN Dateadd(hh, -3, Sysdatetime()) AND Sysdatetime()