2013-08-22 190 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時創建的範圍內可見。

相關問題