我需要在报告表中返回尚未处理的所有报告的列表。我正在使用存储过程进行此过程。
这是我的存储过程创建:
CREATE PROCEDURE spGetAllUntouchedReportID
@ReportID int OUTPUT
AS
BEGIN
SELECT @ReportID=Report.ReportID
FROM Report
WHERE Report.Status IS NULL
END
这就是我调用存储过程的方式:
DECLARE @ReportID int
EXECUTE spGetNextReportID
@ReportID OUTPUT
Print @ReportID
本质上,一个C#应用程序将连接并获取结果集,但我正在使用该调用来测试它。我的问题是对存储过程的调用只打印它找到的最后结果。
以下是报告表的示例集:
ReportID Status
1 NULL
2 Incomplete
3 NULL
打印出对程序的调用:
3
而不是:
1
3
如何让我的存储过程存储它从存储过程返回的集合并调用它来打印每个存储过程?这可能会出现在其他存储过程中,我需要执行具有多个列并需要返回整个集合的Select *
答案 0 :(得分:11)
OUTPUT可以包含一个值。如果要返回值列表,则应将过程更改为以下内容:
CREATE PROCEDURE spGetAllUntouchedReportID
AS
BEGIN
SELECT Report.ReportID
FROM Report
WHERE Report.Status IS NULL
END
这将返回Status
null
的所有值。
答案 1 :(得分:10)
我的建议是将存储过程转换为函数:
CREATE function spGetAllUntouchedReportID
@ReportID int OUTPUT
returns table as
return (SELECT @ReportID=Report.ReportID
FROM Report
WHERE Report.Status IS NULL
)
在存储过程之间返回和共享值的主题提供了许多解决方案。 Erland Sommerskog在这个问题上有一个excellent blog article。