簡體   English   中英

如何遍歷存儲過程記錄集?

[英]How to loop through stored procedure recordset?

我有這個選擇聲明

declare @t table (Percentage float)
DECLARE @acc INT 
SET @acc = 1
DECLARE @max INT 
select @max = max(HireID) from NewHire
WHILE (@acc <= @max)
    BEGIN
        IF (@acc in (select HireID from NewHire))
            BEGIN try
                insert into @t  
                select
                    CAST((select COUNT(*) from Hire_Response WHERE HireID = @acc AND (HireResponse = 0 OR HireResponse = 1)) as FLOAT) / 
                    CAST((select COUNT(*) from Hire_Response WHERE HireID = @acc) as FLOAT)
            END try
            begin catch
                insert into @t 
                select 0.0
            end catch
        set @acc = @acc + 1
    END
select * from @t

在這段代碼中,我按ID從1到最高的ID遍歷了所有NewHire記錄。 我意識到這不再是我想要做的。 現在基本上我有了一個名為sp_selectNewHire2SQL存儲過程,它以特定方式獲取NewHire表。 我想調用它,並獲取其返回的記錄集,然后從上到下遍歷。

注意:從ID 1到最高值的循環將不再起作用,因為ID的順序可能會混淆。

有沒有辦法做到這一點?

謝謝。

select
    NH.HireID,
    ISNULL(1E0 *
          COUNT(CASE WHEN HireResponse IN (0,1) THEN HR.HireID END) / 
          NULLIF(COUNT(HR.HireID), 0)
       , 0) AS percentage
from
    NewHire NH
    LEFT JOIN
    Hire_Response HR ON NH.HireID = HR.HireID
group by
    NH.HireID

注意,您需要在輸出中包括HireID。 除非使用ORDER BY,否則無法保證結果集的順序,因此您不能假定百分比列表是按順序排列的

基本上,您將使用存儲的proc將返回的列創建一個臨時表。 然后,通過執行存儲過程作為插入的一部分,將數據插入其中。 然后,使用選擇語句而不是值語句將其插入表中。

或者,您可以創建一個由存儲的proc組成的表值函數,並僅執行插入操作,並帶有一個選擇語句來對表值函數進行校准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM