我有以下存储过程,它调用另一个存储过程dbo.[spGetResult]
;WITH CTE
AS
(
SELECT 0 AS [Level],PNLId , PNLParentId, PNLName
FROM [dbo].[DimPNL]
WHERE PNLParentId IS NULL
UNION ALL
SELECT CTE.[Level] + 1 ,T1.PNLId,T1.PNLParentId,T1.PNLName
FROM [dbo].[DimPNL] AS T1
INNER JOIN CTE
ON T1.PNLParentId = CTE.PNLId
)
-- order the results into a #temp table
SELECT *
INTO ##temp
FROM CTE
ORDER BY level desc
DECLARE @PNLName As varchar(MAX)
DECLARE db_cursor CURSOR FOR
SELECT PNLName
FROM ##temp
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @PNLName
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO dbo.[test1]//from here I have a problem
Exec dbo.[spGetResult] @PNLName
FETCH NEXT FROM db_cursor INTO @PNLName
END
CLOSE db_cursor
DEALLOCATE db_cursor
我总是得到
存储过程中插入exec语句不能嵌套
我看了一下,但是我不太明白如何解决这个问题
最好的方法是将存储过程重写为表函数。在性能方面,内联函数工作得最好,但是像这样对过程进行函数式重写通常比较困难。
大多数存储过程可以很容易地重写为表值函数。
请看这里获取更多信息:http://technet.microsoft.com/en-us/library/ms187650(v=sql.105).aspx
一旦你重写了它,你就可以嵌套insert到/select语句中。
INSERT INTO [TABLE] (col1, col2,…)SELECT tvfcol1, tvfcol2,…dbo。func_TVF_blabla(@param1, @param2,…)