现在我收到“无效的对象名称 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/