无法绑定多部件标识符

时间:2014-06-24 05:59:42

标签: asp.net sql-server vb.net

我在尝试执行以下代码时遇到错误,请帮助我

If Convert.ToString(Session("userType")).ToLower() = "admin" Then
        cmd.CommandText = "select sno, (SELECT UserName FROM UserDetails WHERE userid=Maintenanceinfo.userid) AS userid, (SELECT Category_Name FROM Maintenance_Category WHERE Category_Value=Maintenanceinfo.Category_Value) AS Category_Value, Maintenance, January, February, March, April, May, June, July, August, September, October, November, December from Maintenanceinfo where year = " & dt1 & " Order by Category_Value"
ElseIf Convert.ToString(Session("userType")).ToLower() = "manager" Then
        cmd.CommandText = "select sno, (SELECT UserName FROM UserDetails WHERE userid=a.userid) AS userid, (SELECT Category_Name FROM Maintenance_Category WHERE Category_Value=Maintenanceinfo.Category_Value) AS Category_Value, Maintenance, January, February, March, April, May, June, July, August, September, October, November, December from Maintenanceinfo a,UserDetails b where a.userid=b.userid and b.Managerid= " & Session("userId") & " and year = " & dt1 & " Order by Category_Value "
Else
        cmd.CommandText = "select sno, (SELECT UserName FROM UserDetails WHERE userid=Maintenanceinfo.userid) AS userid, (SELECT Category_Name FROM Maintenance_Category WHERE Category_Value=Maintenanceinfo.Category_Value) AS Category_Value, Maintenance, January, February, March, April, May, June, July, August, September, October, November, December from Maintenanceinfo with (nolock) where userid= " & Session("userId") & " and year = " & dt1 & " Order by Category_Value "
End If

生成的错误是The multi-part identifier "Maintenanceinfo.Category_Value" could not be bound

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

问题可能在于第二个陈述(尽管你真的应该花一点时间来帮助我们解决哪些三个单独的SQL语句引发了这个问题)。 / p>

SQL是:

select sno, (SELECT UserName FROM UserDetails WHERE userid=a.userid) AS userid,
   (SELECT Category_Name FROM Maintenance_Category WHERE             
         Category_Value=Maintenanceinfo.Category_Value) AS Category_Value,
    Maintenance, January, February, March, April, May, June, July, August,
    September, October, November, December
from Maintenanceinfo a,UserDetails b
where a.userid=b.userid and b.Managerid= " & Session("userId") &
    " and year = " & dt1 & "
Order by Category_Value

此子查询导致错误:

(SELECT Category_Name FROM Maintenance_Category WHERE             
         Category_Value=Maintenanceinfo.Category_Value)

因为此时名称Maintenanceinfo不在范围内,因为对于此查询,您已为此表引入了别名 - a。所以正确的查询应该是:

select sno, b.UserName AS userid,
   (SELECT Category_Name FROM Maintenance_Category WHERE             
         Category_Value=a.Category_Value) AS Category_Value,
    Maintenance, January, February, March, April, May, June, July, August,
    September, October, November, December
from Maintenanceinfo a
        inner join
     UserDetails b
        on
           a.userid = b.userid
where b.Managerid= " & Session("userId") &
    " and year = " & dt1 & "
Order by Category_Value

我还在,条款中切换到ANSI连接语法而不是FROM - 它们只在标准中存在了20多年......

我还删除了一个不需要的子查询,因为你已经加入了UserDetails表。