Sql server 2012 无法在SQL Server 2012中绑定多部分标识符

Sql server 2012 无法在SQL Server 2012中绑定多部分标识符,sql-server-2012,Sql Server 2012,我试图在IF块中使用资源属性表。错误在第二个if块中: 无法绑定多部分标识符“ra.Start_dt” 我使用了别名,即ra,即使这样,我也会出现此错误。有人能帮我解决这个问题吗 IF (@toyear - @fromyear = 0) BEGIN SET @vacsql = 'SELECT DISTINCT a.resourceID, r.EnterpriseID, r.FullName,

我试图在IF块中使用资源属性表。错误在第二个if块中:

无法绑定多部分标识符“ra.Start_dt”

我使用了别名,即ra,即使这样,我也会出现此错误。有人能帮我解决这个问题吗

IF (@toyear - @fromyear = 0)
BEGIN
    SET @vacsql = 'SELECT DISTINCT 
                       a.resourceID, r.EnterpriseID, r.FullName, 
                       dbo.fnGetWorkOrdersByResourceID(a.resourceID,' + 
                          CAST(@tomonth AS VARCHAR(2)) + ',' +
                          CAST(@toyear AS VARCHAR(4)) + ') AS WorkOrder,         
                       dbo.fnGetDomainsByResourceID(a.resourceID,' + 
                          CAST(@tomonth AS VARCHAR(2)) + ',' +
                          CAST(@toyear AS VARCHAR(4)) + ') AS Domain,  
                       l.Offshore_Ind,
                       SUM(ISNULL(a.Totals, 0)) AS TOTALHOURS
                   FROM 
                       [Actuals] AS a 
                   JOIN
                       [Resources] AS r ON a.ResourceID = r.ResourceID 
                   JOIN 
                       Resource_Attributes AS ra ON r.ResourceID = ra.ResourceID 
                   JOIN
                       Location_LU AS l ON ra.LocationID = l.LocationID 
                   JOIN 
                       Roll_On_Off AS ro ON r.ResourceID = ro.ResourceID
                   WHERE 
                       (a.TaskName = ''Leave'') 
                       AND a.CalYear = ' + CAST(@toyear AS VARCHAR(10)) + 
                     ' AND CalMonthNum <= ' + CAST(@tomonth AS VARCHAR(10)) +
                     ' AND CalMonthNum >= ' + CAST(@frommonth AS VARCHAR(10)) +
                     'AND (CONVERT(datetime, ro.End_Dt)) > (CONVERT(datetime, '''+cast(concat(@frommonth,'/01/',@toyear) as varchar(10))+'''))
                           (CONVERT(datetime,ra.Start_dt))<=(CONVERT(datetime,@StartDate)) AND (CONVERT(datetime,ra.End_dt))>=(CONVERT(datetime,@EndDate))
                           GROUP BY ra.AttributeID,a.ResourceID,r.EnterpriseID,r.FullName,l.offshore_Ind'

                           if((CONVERT(datetime,ra.Start_dt))<=(CONVERT(datetime,@StartDate)) AND (CONVERT(datetime,ra.End_dt))>=(CONVERT(datetime,@EndDate)) AND CONVERT(datetime,ra.Start_dt) between (CONVERT(datetime,@StartDate)) AND (CONVERT(datetime,@EndDate)))
                            BEGIN
                            INSERT INTO @vacTable EXECUTE sp_executesql @vacsql,
                                                    N'@StartDate varchar(25), @EndDate varchar(25)',
                                                    @StartDate,
                                                    @EndDate;
                            END
IF(@toyear-@fromyear=0)
开始
SET@vacsql='选择不同的
a、 resourceID,r.EnterpriseID,r.FullName,
dbo.fGetWorkOrdersByResourceId(a.resourceID,'+
转换(@tomonth为VARCHAR(2))+','+
将(@toyear作为VARCHAR(4))+')转换为WorkOrder,
dbo.fGetDomainsByResourceId(a.resourceID,'+
转换(@tomonth为VARCHAR(2))+','+
将(@toyear作为VARCHAR(4))+')转换为域,
l、 离岸工业,
总和(ISNULL(a.Totals,0))作为总小时数
从…起
[实际值]作为
参加
[Resources]作为r在a.ResourceID=r.ResourceID上
参加
资源\在r.ResourceID=ra.ResourceID上作为ra的属性
参加
位置\u LU作为ra上的l.LocationID=l.LocationID
参加
按ro On r.ResourceID=ro.ResourceID进行滚装
哪里
(a.TaskName=“离开”)
和a.CalYear='+CAST(@toyear AS VARCHAR(10))+
'和CalMonthNum='+施放(@frommonth作为VARCHAR(10))+
'和(转换(datetime,ro.End_Dt))>(转换(datetime,''+cast(concat(@frommonth,'/01/',@toyear)为varchar(10))+''))
(CONVERT(datetime,ra.Start_dt))=(CONVERT(datetime,@EndDate))
按ra.AttributeID、a.ResourceID、r.EnterpriseID、r.FullName、l.offshore_Ind'分组
如果((CONVERT(datetime,ra.Start_dt))=(CONVERT(datetime,@EndDate))和CONVERT(datetime,ra.Start_dt)介于(CONVERT(datetime,@StartDate))和(CONVERT(datetime,@EndDate)))
开始
插入@vacTable EXECUTE sp_executesql@vacsql,
N'@StartDate varchar(25),@EndDate varchar(25)',
@开始日期,
@结束日期;
结束
试试这个

 if (@toyear-@fromyear=0)

                       BEGIN
                              Set @vacsql = 'SELECT DISTINCT a.resourceID,r.EnterpriseID,r.FullName, dbo.fnGetWorkOrdersByResourceID(a.resourceID,'+ CAST(@tomonth AS VARCHAR(2))+','+CAST(@toyear AS VARCHAR(4)) +') as WorkOrder,         
                           dbo.fnGetDomainsByResourceID(a.resourceID,'+ CAST(@tomonth AS VARCHAR(2))+','+CAST(@toyear AS VARCHAR(4)) +') as Domain, l.Offshore_Ind,SUM(ISNULL(a.Totals,0)) AS TOTALHOURS
                           FROM [Actuals] AS a join [Resources] AS r on a.ResourceID=r.ResourceID 
                           join Resource_Attributes as ra on r.ResourceID=ra.ResourceID 
                           join Location_LU as l on ra.LocationID=l.LocationID 
                           join Roll_On_Off as ro on r.ResourceID=ro.ResourceID
                           WHERE (a.TaskName=''Leave'') AND a.CalYear='+CAST(@toyear as varchar(10))+' AND CalMonthNum <='+CAST(@tomonth as varchar(10))+' AND CalMonthNum >='+CAST(@frommonth as varchar(10))+' 
                           AND (CONVERT(datetime,ro.End_Dt))>(CONVERT(datetime,'''+cast(concat(@frommonth,'/01/',@toyear) as varchar(10))+'''))
                           (CONVERT(datetime,ra.Start_dt))<=(CONVERT(datetime,@StartDate)) AND (CONVERT(datetime,ra.End_dt))>=(CONVERT(datetime,@EndDate))
                           GROUP BY ra.AttributeID,a.ResourceID,r.EnterpriseID,r.FullName,l.offshore_Ind'

                           if exists (select 1 from Resource_Attributes ra where (CONVERT(datetime,ra.Start_dt))<=(CONVERT(datetime,@StartDate)) AND (CONVERT(datetime,ra.End_dt))>=(CONVERT(datetime,@EndDate)) AND CONVERT(datetime,ra.Start_dt) between (CONVERT(datetime,@StartDate)) AND (CONVERT(datetime,@EndDate)))
                            BEGIN
                            INSERT INTO @vacTable EXECUTE sp_executesql @vacsql,
                                                    N'@StartDate varchar(25), @EndDate varchar(25)',
                                                    @StartDate,
                                                    @EndDate;
                            END
                            END
if(@toyear-@fromyear=0)
开始
设置@vacsql='选择不同的a.resourceID、r.EnterpriseID、r.FullName、dbo.fnGetWorkOrdersByResourceID(a.resourceID、“+CAST(@tomonth AS VARCHAR(2))+”、“+CAST(@toyear AS VARCHAR(4))+”)作为工作顺序,
dbo.fnGetDomainsByResourceID(a.resourceID,“+CAST(@tomonth AS VARCHAR(2))+”,“+CAST(@toyear AS VARCHAR(4))+”)AS Domain,l.Offshore_Ind,SUM(ISNULL(a.Totals,0))AS TOTALHOURS
从[Actuals]作为联接[Resources]作为r在a.ResourceID=r.ResourceID上
在r.ResourceID=ra.ResourceID上将资源\u属性作为ra连接
连接位置\u LU作为ra上的l。LocationID=l.LocationID
加入Roll_On_Off作为r.ResourceID=ro.ResourceID上的ro
其中(a.TaskName=''Leave'')和a.CalYear='+CAST(@toyear作为varchar(10))+'和CalMonthNum='+CAST(@frommonth作为varchar(10))+'
和(转换(datetime,ro.End_Dt))>(转换(datetime,“+”cast(concat(@frommonth,“/01/”,@toyear)为varchar(10))+”))
(CONVERT(datetime,ra.Start_dt))=(CONVERT(datetime,@EndDate))
按ra.AttributeID、a.ResourceID、r.EnterpriseID、r.FullName、l.offshore_Ind'分组
如果存在(从资源属性ra中选择1,其中(CONVERT(datetime,ra.Start_dt))=(CONVERT(datetime,@EndDate))和CONVERT(datetime,ra.Start_dt)介于(CONVERT(datetime,@StartDate))和(CONVERT(datetime,@EndDate))之间
开始
插入@vacTable EXECUTE sp_executesql@vacsql,
N'@StartDate varchar(25),@EndDate varchar(25)',
@开始日期,
@结束日期;
结束
结束

请检查是否有遗漏和之前(转换(日期时间,ra.start\u dt))