我运行这是给我的关于“多部分标识符”错误动态SQL。由于我在不同的表中使用了相同名称的列,所以我在列名前加上一个表别名,这似乎是问题所在。T-SQL错误:“多部分标识符X.Y无法绑定”
报告的错误是:
The multi-part identifier
e.Categorydescription
could not be bound.
The multi-part identifierl.FullAddress
could not be bound.
Categorydescription
存在于表Events
和Categories
,和列FullAddress
在表Events
和Location
存在,因此我使用e.Categorydescription
和l.FullAddress
列。我不能删除内部连接,因为我需要表Location
和Categories
中的其他列。
我错估了错误。实际的错误是进一步下跌(下图)在我从##读码结果全局表:
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"
shoule e.CategoryDescription是c.CategoryDescription。如果你添加了表格结构,这将有所帮助。 – 2014-08-29 09:20:15
@ user2906420:我简化了您的问题,使其更容易和更快速阅读。你已经用你的'PRINT'输出显示了什么实际的SQL查询被执行了,所以我删除了不相关的位(从几个变量构建SQL查询的地方)并且替换了实际的SQL。 (如果你不同意它,请随意回滚我的编辑。) – stakx 2014-08-29 09:29:54
我对你的'SELECT'列'## RowNum'很好奇。我明白[表格名称(全局临时表格)]中的##是什么意思(http://stackoverflow.com/a/3166130/240733),但列名称...?这是一个有效的列名,或者你需要**(a)**删除'##';或者**(b)**通过将其放在尖括号中来转义列名:'[## RowNum]'? – stakx 2014-08-29 09:35:43