【发布时间】:2014-10-23 06:22:37
【问题描述】:
我正在运行一个动态 SQL,它给我一个关于“多部分标识符”的错误。因为我在不同的表中有同名的列,所以我在列名前加上表别名,这似乎是问题所在。
报告的错误是:
无法绑定多部分标识符
e.Categorydescription。
无法绑定多部分标识符l.FullAddress。
Categorydescription 列存在于表Events 和Categories 中,FullAddress 列存在于表Events 和Location 中,因此我使用e.Categorydescription 和l.FullAddress。我无法删除内部连接,因为我需要 Location 和 Categories 表中的其他列。
我误判了错误。实际错误在我从##Results 全局表中读取的代码中更靠下(如下):
SET @s_query = 'SELECT ' + @ColNames + ' FROM ##Results
WHERE ##RowNum BETWEEN('+CONVERT(varchar(20),@PageIndex)+'-1) * '+
CONVERT(varchar(20),@PageSize)+' + 1
AND((('+CONVERT(varchar(20),@PageIndex)+' -1) * '+
CONVERT(varchar(20),@PageSize)+' + 1) + '+CONVERT(varchar(20),@PageSize)+') - 1
ORDER BY ##RowNum';
EXEC (@s_query); -- the error is from here
--because #Results# has "Categorydescription" instead of "e.Categorydescription"
【问题讨论】:
-
应将 e.CategoryDescription 设为 c.CategoryDescription。如果您添加表结构会有所帮助。
-
@user2906420:我已对您的问题进行了缩写,以便于阅读。您已经使用
PRINT输出显示了实际执行的 SQL 查询,因此我删除了不相关的位(您从多个变量构建 SQL 查询的位置)并替换了实际的 SQL。 (如果您不同意我的编辑,请随时回滚。) -
我很好奇你的
SELECT专栏##RowNum。我了解what##means in table names (global temporary tables),但是有列名……?这是一个有效的列名,还是您需要(a) 删除##;或 (b) 通过将列名放在尖括号中来转义:[##RowNum]? -
我将在上面更新表格结构。 @stakx 是的,它是一个有效的列,因为我将上面的相同代码与其他存储过程一起使用,这些存储过程在表中没有相同的列名。所以上面的代码结构可以正常工作,但是多部分标识符存在问题。
-
@SteveFord 我尝试用 cat.Categorydescription 更改 e.Categorydescription 但同样的错误
标签: sql sql-server tsql