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)
在实际过程中,有些查询的开销很大,所以我不想测试查询,然后如果它返回一行或更多,再次执行它......因为它太昂贵了。
我有一个存储过程,它返回多个记录集以在应用程序中使用。有时,其中一些记录集是空的。
我想减少开销,只返回那些有 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)