SQL 存储过程 OUTPUT 返回多行

标签 sql sql-server sql-server-2008 stored-procedures

我需要返回尚未处理的报告表中所有报告的列表。我正在为此过程使用存储过程。

这是我的存储过程创建:

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 * 并需要返回整个集合

最佳答案

OUTPUT 可以在其中保存一个值。如果要返回值列表,则应将过程更改为以下内容:

CREATE PROCEDURE spGetAllUntouchedReportID

AS
BEGIN
    SELECT Report.ReportID
    FROM Report
    WHERE Report.Status IS NULL
END

这将返回所有具有 Status 的值的 null .

SQL Fiddle with Demo

关于SQL 存储过程 OUTPUT 返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16126746/

相关文章:

mysql - 如果已存在具有相同值的行,则增加一列

sql - 更新一列的多行

python - SQLAlchemy order_by 公式结果

sql-server - 哪种分页方法 (Sql Server 2008) 的性能最佳?

java - 使用 SQL Server 2008 作为应用程序数据库的 tomcat 应用程序性能缓慢

sql - 尝试在 SQL 中从另一个表更新一个表 - 返回 "more than one value"错误

MySQL - 在 A 列上联接表,除非 A 列 = x,然后在 b 列上联接

mysql - 无法在 MySQL 触发器中声明变量

sql-server - SQL Server 2008中的临时表上的nolock

sql-server - 如何一次为多个表启用标识插入?