2013-08-22 2 views
2

Прямо сейчас я получаю сообщение об ошибке «Недопустимое имя объекта qryTI_3». Я получаю эту ошибку только при попытке выполнить всю процедуру, но я все еще могу сохранить эту процедуру. Я проверил, что все поля существуют в указанной таблице. Что не так с этим запросом?Недопустимое имя объекта - SQL Server 2008

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX); 


WITH qryTI_1 AS 
(
SELECT tblTSF.fldFPK, tblTSF.fldPK, tblTSF.fldCI, tblTSF.fldNI 
FROM tblTSF 
WHERE (((tblTSF.fldMN)<>-254)) 
), 

qryTI_2 AS 
(
SELECT tblTSF.fldFPK, tblTSF.fldPK, tblAL.fldLN AS fldCI, 0 AS fldNI 
FROM tblAL, tblTSF 
GROUP BY tblTSF.fldFPK, tblTSF.fldPK, tblAllLevels.fldLN 
HAVING (((tblAL.fldLN)<>0 And (tblAL.fldLN)<>6)) 
), 

qryTI_3 AS 
(
SELECT * FROM qryTI_1 UNION SELECT * FROM qryTI_2 
) 

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(fldCI) 
        from qryTI_3 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT fldPK, fldFPK, ' + @cols + ' 
       FROM 

       (
       SELECT fldPK 
         ,fldFPK 
         ,fldNI 
         ,fldCI 
       FROM qryTI_3  
       ) as x 
       PIVOT 
       (
        Sum(fldNI) FOR fldCI IN (' + @cols + ') 
       ) as p ' 

     execute sp_executesql @query 

ответ

4

CTE существует только на время выполнения этого утверждения.

WITH 
    cte1 AS 
    (blah) 
    , 
    cte2 AS 
    (blah) 
    , 
    cte3 AS 
    (blah) 

    statement1; -- The CTE definitions are part of this statement 

    statement2; -- They are not part of this statement, they're gone by now 

Таким образом, как только ваш SET оператор завершает КТОС также исчезает, прежде чем вы когда-либо достичь execute вызова.

Не говоря уже о том, что ваш звонок в execute также создал новую область действия, в которой CTE и переменные также не существуют.

Попробуйте сделать эти представления вместо CTE - чтобы они существовали более чем для одного оператора и видны в пределах области, созданной вашим вызовом, до execute.

Смежные вопросы