如果下面有 raiseerror,如何不在 SQL 服务器存储过程中 return select 语句?

How not to return select statements in SQL Server stored procedure if there is raiseerror below?

如果存在 raiseerror 或 throw below,是否可以在 SQL 服务器中以某种方式不在存储过程中 return select 语句?

我有 select 语句,如果行数大于某个数字,我会引发错误。在我的应用程序中,我使用 ado.net,因此错误出现在第二个结果中(我必须执行 NextResult(),因此在它之前我必须处理我的第一个结果)。是否有可能知道是否有第二个结果?或者可以不 return select 吗?或者我该如何解决这个问题:如果行数大于某个特定数字,则不处理 select?

您无法检查一个语句将 return 的行数,而不是 运行,不。如果您有一个(简单的)语句,如 SELECT * FROM MyTable1 MT1 JOIN MyTable2 MT2 on MT1.ID = MT2.fID;,直到该语句为 运行,SQL 服务器将不知道将 return 编辑多少行。

但是,如果您不想 return 该数据集(如果它有更多 x 行),您可以使用 IF 语句:

IF (SELECT COUNT(*) FROM MyTable1 MT1 JOIN MyTable2 MT2 on MT1.ID = MT2.fID) <= 1024 BEGIN

    SELECT *
    FROM MyTable MT1
         JOIN MyTable MT2 ON MT1.ID = MT2.fID;

    SELECT ... --Your other SELECT statement
END ELSE BEGIN
    RAISERROR(...
END

如果超过 1024 行,则不会 return 编辑任何数据集。此选项(可能)比将所有数据插入临时 table 的过程成本更低,尤其是在您使用大型数据集时。如果您要将所有内容插入临时 table,那么 行都需要读取并写入 tempdb,然后在 return 数据时读回在你的声明结束时;这不是一个有大量数据的廉价操作。