當我收到以下錯誤在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