我有一个递归存储过程,它在我的层次结构表中查找错误。由于它是递归的,如果它发现了一个错误,它会在该递归调用中被选中。因此,递归调用中有许多选择。我的问题是如何在.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();
答案 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