Sql-Server

如果它有行,則僅從儲存過程返回記錄集

  • November 25, 2019

我有一個儲存過程,它返回多個記錄集以在應用程序中使用。有時其中一些記錄集是空的。

我想減少成本,只返回那些有 1 行或更多行的。

我的問題是 - 我怎樣才能只返回那些有行的記錄集?

應用程序只需要 0 個或多個記錄集,然後循環遍歷每個記錄集,然後將它們列印出來。

我知道我可以在應用程式碼中跳過它們,但我試圖阻止它們被返回,如果它們為空的話。

過程很簡單:

CREATE PROCEDURE bfsp_PROC_NM
AS 

   BEGIN

       SELECT * FROM TABLE_1

       SELECT * FROM TABLE_2

       SELECT * FROM TABLE_3

       RETURN  

   END
GO

在實際過程中,有些查詢很昂貴,所以我不想測試查詢,如果它返回一行或更多,請再次執行……因為它太昂貴了。

我有一個儲存過程,它返回多個記錄集以在應用程序中使用。有時其中一些記錄集是空的。

我想減少成本,只返回那些有 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

引用自:https://dba.stackexchange.com/questions/253924