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

T-SQL错误:“无法绑定多部分标识符X.Y”,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在运行一个动态SQL,它给了我一个关于多部分标识符的错误。由于我在不同的表中对列进行了相同的命名,所以我在列名前面加了一个表别名,这似乎就是问题所在 报告的错误有: 无法绑定多部分标识符e.Categorydescription。 无法绑定多部分标识符l.FullAddress 列Categorydescription存在于表Events和Categories中,列FullAddress存在于表Events和Location中,因此我使用e.Categorydescription和l.Ful

我正在运行一个动态SQL,它给了我一个关于多部分标识符的错误。由于我在不同的表中对列进行了相同的命名,所以我在列名前面加了一个表别名,这似乎就是问题所在

报告的错误有:

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

列Categorydescription存在于表Events和Categories中,列FullAddress存在于表Events和Location中,因此我使用e.Categorydescription和l.FullAddress。我无法删除内部联接,因为我需要表位置和类别中的其他列

我误判了错误。在下面的代码中,我从结果全局表中读取了实际错误:

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"

抱歉,目前无法发布评论

@ColNames-这是什么?e、 类别名称还是类别名称

我假设你这里有e.categorynames和l.fulladdress。SQL Server绝对需要select中的多部分引用,因为两个位置存在相同的列,但是结果列将只是列名。您可以通过将查询的一部分作为标准选择运行来证明这一点

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';
这应该显示余额日期、全名、类别说明和全名的列名,前面没有多部分标识符

删除multipart并将其引用为categorynames和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包含这些别名

e.类别说明应该是c.类别说明。如果您添加了表结构,这会有所帮助。@user2906420:我已将您的问题缩短,以使其更易于阅读。您已经用打印输出显示了实际执行的SQL查询,因此我删除了从多个变量构建SQL查询的不相关部分,并替换了实际SQL。如果您不同意,请随时回滚我的编辑。我对您的SELECT列RowNum很好奇。我明白,但是列名…?这是一个有效的列名,还是需要删除;或者通过将列名放在尖括号中[RowNum]来转义列名?我将用表结构更新上面的内容@stakx是的,它是一个有效的列,因为我在表中没有相同列名的其他存储过程中使用了上面相同的代码。因此,上面的代码结构工作正常,但多部分标识符有问题。@SteveFord我尝试用cat.Categorydescription更改e.Categorydescription,但出现了相同的错误