sql-server-2008 - 无效的对象名称 - SQL Server 2008

标签 sql-server-2008 t-sql

现在我收到“无效的对象名称 qryTI_3”错误。仅当我尝试执行整个过程时才会出现此错误,但我仍然可以保存该过程。我已验证引用的表中确实存在所有字段。这个查询有什么问题?

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

最佳答案

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 调用之前,CTE 也会消失。

更不用说您对 execute 的调用还创建了一个新作用域,其中 CTE 和变量也不存在。

尝试制作这些 View 而不是 CTE - 以便它们存在于多个语句中,并且在您调用 execute 创建的范围内可见。

关于sql-server-2008 - 无效的对象名称 - SQL Server 2008,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18391311/

相关文章:

sql - TSQL 语句 IN

sql - 与 'convert' 函数一起使用时,Where 子句失败

sql - 在 SQL 中使用两个表进行透视和逆透视(将值转置为列标题)

sql-server-2008 - "select 1 from"有什么作用?

sql-server-2008 - SQL Server 2008 智能感知不再工作

sql - 从另一个表更新随机行 SQL Server 2014

sql - 我如何正确地装框这个校对?

sql - 如何将负秒转换为 HH :MM:SS

visual-studio-2010 - VS2010 数据库项目部署,是否会丢失数据会失败?

sql-server-2008 - Grails为MSSQL生成可疑的分页查询