如果有行,则仅从存储过程返回记录集

GWR*_*GWR 3 sql-server stored-procedures t-sql sql-server-2014

我有一个存储过程,它返回多个记录集以在应用程序中使用。有时,其中一些记录集是空的。

我想减少开销,只返回那些有 1 行或更多行的。

我的问题是 - 我怎样才能只返回那些有行的记录集?

应用程序只需要 0 个或更多记录集,并循环遍历每个记录集,然后将它们打印出来。

我知道我可以在应用程序代码中跳过它们,但我试图阻止它们被返回(如果为空)。

程序很简单:

CREATE PROCEDURE bfsp_PROC_NM
AS 

    BEGIN

        SELECT * FROM TABLE_1

        SELECT * FROM TABLE_2

        SELECT * FROM TABLE_3

        RETURN  

    END
GO
Run Code Online (Sandbox Code Playgroud)

在实际过程中,有些查询的开销很大,所以我不想测试查询,然后如果它返回一行或更多,再次执行它......因为它太昂贵了。

Dav*_*oft 5

我有一个存储过程,它返回多个记录集以在应用程序中使用。有时,其中一些记录集是空的。

我想减少开销,只返回那些有 1 行或更多行的。

这是一个可怕的想法。应用程序如何知道它正在处理什么结果集?存储过程应该有一组固定的结果集形状。

话虽如此,要做到这一点,将结果加载到临时表中,然后从那些非空的表中选择。

例如

CREATE PROCEDURE bfsp_PROC_NM
AS 

    BEGIN
        SELECT * 
        into #result1
        FROM TABLE_1
        if @@rowcount > 0
          select * from #result1

        SELECT * 
        into #result2
        FROM TABLE_2
        if @@rowcount > 0
          select * from #result2

        SELECT * 
        into #result3
        FROM TABLE_3
        if @@rowcount > 0
          select * from #result3

    END
GO
Run Code Online (Sandbox Code Playgroud)