当我收到以下错误在SQL Server 2012:错误使用插入CTE
无效的对象名称库“。
有没有办法修改语法,所以我不必使用表变量?问题出现在代码的最后,我把它放在声明中。
下面是代码:
SET NOCOUNT ON
declare @level int = 0
DECLARE @DataLibraryName VARCHAR(500)
SET @DataLibraryName = 'FN_PerfSalesChargeFeeReplacementText';
IF LTRIM(RTRIM(@DataLibraryName)) = ''
SET @DataLibraryName = null;
WITH DataLibraryRaw AS
(
SELECT
*
,CAST(CAST(dataLibraryXML AS NTEXT) AS XML) dataLibraryXMLData
,datasource_name dataLibraryName
FROM
tblrpt_datascript
--WHERE datasource_type = 'DLMERGE'
),
DataLibraryDep AS
(
SELECT
dataLibraryName
,dataLibraryXMLData.query('//SourceSpecification') [SourceSpecification]
FROM
DataLibraryRaw
),
DependenciesXML AS
(
SELECT
dataLibraryName
,CAST(REPLACE(REPLACE(CAST([SourceSpecification] AS NVARCHAR(MAX)), '#', '<item>#'), '}', '}</item>') AS XML) AS dataLibraryXMLData
FROM
DataLibraryDep
),
DataLibraries AS
(
SELECT
dataLibraryName
,d.i.query('.').value('.', 'nvarchar(max)') dependDataLibrary
FROM
DependenciesXML dx
CROSS APPLY
dataLibraryXMLData.nodes('//item') AS d(i)
),
Libraries AS
(
SELECT
dataLibraryName parentDL
,LTRIM(RTRIM(SUBSTRING([dependDataLibrary], CHARINDEX('=', [dependDataLibrary] ,1)+1 ,CHARINDEX('{', [dependDataLibrary], 1)-(CHARINDEX('=', [dependDataLibrary] ,1)+1)))) childDL
FROM
DataLibraries
),
RecursiveData AS
(
SELECT
*, 0 AS LEVEL
FROM
Libraries
WHERE
parentDL = IsNull(@DataLibraryName, parentDL)
)
SELECT *
FROM RecursiveData
---- Recursive member definition
insert RecursiveData
SELECT
m.parentDL, m.childDL,
@level + 1
FROM
Libraries m
INNER JOIN
RecursiveData r ON r.childDL = m.parentDL AND r.level = @level
预先感谢您。
所有这些CTE(包括'Libraries')只对**一个,单个下一个语句**('SELECT * FROM RecursiveData')有效 - 您不能在后面的 – 2014-12-03 06:08:58