T-SQL错误:"多部分标识符X.Y无法绑定"

时间:2014-08-29 08:54:56

标签: sql sql-server tsql

我正在运行一个动态SQL,它给我一个关于"多部分标识符"的错误。由于我在不同的表中具有相同名称的列,因此我在列名称前加上表别名,这似乎是问题。

报告的错误是:

  

无法绑定多部分标识符e.Categorydescription
  无法绑定多部分标识符l.FullAddress

Categorydescription列中存在Events列,Categories表中存在FullAddress列,EventsLocation列中存在列e.Categorydescription,因此我就是使用l.FullAddressLocation。我不能删除内部联接,因为我需要表CategoriesSET @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}}

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,CategoryDe​​scription和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包含这些别名。