从递归存储过程中获取选择结果

时间:2015-03-18 08:39:35

标签: sql .net sql-server sql-server-2008

我有一个递归存储过程,它在我的层次结构表中查找错误。由于它是递归的,如果它发现了一个错误,它会在该递归调用中被选中。因此,递归调用中有许多选择。我的问题是如何在.NET应用程序中捕获所有这些结果?我可以在SSMS中看到这个结果,但在.NET中我只看到最新选择的最后结果。

我的程序(由于简单性而省略了大部分代码 - 我只留下了基础知识,并且在发现错误时是递归选择):

CREATE PROCEDURE MyProcedure
@Node HierarchyID,
@Iterator int
AS



IF -- some condition
BEGIN
  SELECT 'ERROR: ' + @ChildNumber + @Node
END

OPEN ChildRowsCursor

WHILE (@Iterator <= 100)
	BEGIN	
		FETCH NEXT FROM ChildRowsCursor INTO @CurrentChildNode
		EXEC dbo.MyProcedure @CurrentChildNode, @Iterator		
		SET @Iterator = @Iterator + 1
	END
	


CLOSE ChildRowsCursor
DEALLOCATE ChildRowsCursor

END

修改

对于调用存储过程,我使用表适配器:

DataLayer.MyTableAdapters adapter = new DataLayer.MyTableAdapters();
adapter.GetAllErrors();

1 个答案:

答案 0 :(得分:0)

使用临时表来选择结果:

CREATE PROCEDURE MyProcedure
@Node HierarchyID,
@Iterator int
AS
IF OBJECT_ID('tempdb..#result')  IS NULL
CREATE TABLE #result (res VARCHAR(1000));

IF -- some condition
BEGIN
  INSERT INTO #result VALUES ( 'ERROR: ' + @ChildNumber + @Node);
END

OPEN ChildRowsCursor

WHILE (@Iterator <= 100)
    BEGIN   
        FETCH NEXT FROM ChildRowsCursor INTO @CurrentChildNode
        EXEC dbo.MyProcedure @CurrentChildNode, @Iterator       
        SET @Iterator = @Iterator + 1
    END



CLOSE ChildRowsCursor
DEALLOCATE ChildRowsCursor

SELECT * FROM #result;

END