[英]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.