我正在运行一个动态SQL,它给我一个关于"多部分标识符"的错误。由于我在不同的表中具有相同名称的列,因此我在列名称前加上表别名,这似乎是问题。
报告的错误是:
无法绑定多部分标识符
e.Categorydescription
。
无法绑定多部分标识符l.FullAddress
。
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"
中的其他列。
我误判了错误。我从## Results global table:
读取的代码中的实际错误进一步下降(下面){{1}}
答案 0 :(得分:2)
暂不发表评论,抱歉。
@ColNames - 这是什么? e.categorynames或categorynames?
我假设你在这里有e.categorynames和l.fulladdress。由于两个位置存在相同的列,SQL Server绝对需要select中的multipart引用,但结果列只是Columnname。您可以通过仅将部分查询作为标准选择
来运行来证明这一点Select Balance_Date,
FullName,
e.Categorydescription,
l.FullAddress
From [Events] e
inner join Person c ON e.Pid = c.Pid
inner join Categories cat ON e.Cid = cat.Cid
inner join Location l ON e.Lid = l.Lid';
这应该显示Balance_Date,FullName,CategoryDescription和FullAddress的列名(即前面没有多部分标识符)。
删除多部分,只需将它们作为类别名称和fulladdress引用,或者甚至更好地对它们进行重新别名,这样您就可以100%了解##结果中列的名称。
SET @s_query = '
Select ROW_NUMBER() OVER (ORDER BY Balance_Date asc) AS ##RowNum,
Balance_Date AS Balance_Date,
FullName AS Fullname,
e.Categorydescription AS CategoryDescription,
l.FullAddress AS FullAddress
INTO ##Results
From [Events] e
inner join Person c ON e.Pid = c.Pid
inner join Categories cat ON e.Cid = cat.Cid
inner join Location l ON e.Lid = l.Lid';
然后确保@ColNames包含这些别名。