2014-07-19 43 views
2

如何爲每個ProductId執行sp_1並獲取結果集?執行將查詢作爲參數的存儲過程

EXEC sp_1 (SELECT ID FROM Products) 
+0

http://stackoverflow.com/questions/4327955/ssis-result-set- fed-in-parallel-to-stored-procedure – Benny

+3

使用[cursor](http://stackoverflow.com/q/886293/11683)將每個結果放在一個臨時表中,或[convert](http:/ /stackoverflow.com/a/16419753/11683)您的程序運行。 – GSerg

回答

2

試試這種方法。看起來沒有直接的查詢。 execute sp for each row

或者試試這個,如果需要的話做一些小的改動。用臨時表來獲取sp值。如果需要,請在sp內使用以下內容。

begin 
declare @ID int 
declare @temp table (col1 int) 
declare cur cursor for select distinct ID from products 
open cur 
fetch next from cur into @ID 
truncate table @temp 
while(@@FETCH_STATUS=0) 
begin 
insert into @temp (<'cols/output from procedure'>) exec (@ID) 
end 
select * from @temp 
end 
0

我將存儲的ID在一個臨時表和使用循環(避免CURSORS!)

 
DECLARE @prodid INT 
SELECT prodid, 0 as Processed INTO #prod_ids FROM Products 

WHILE EXISTS (SELECT prodid FROM #prod_ids WHERE Processed = 0) 
BEGIN 
    SELECT TOP 1 @prodid = prodid FROM #prod_ids WHERE Processed = 0 
    EXEC sp_1(@prodid) 
    UPDATE #prod_ids SET Processed = 1 WHERE prodid = @prodid 
END 

+0

不是每個人都會同意你避免遊標http://www.sqlteam.com/article/cursors-an-overview – DeanOC

+0

@DeanOC,我肯定會。如果有其他選擇;遊標可以避免,那麼它應該是。 – Rahul

+1

@Rahul我儘量避免他們自己,但只要你意識到他們的侷限性,他們可以是有用的。這是一種情況,即循環結構中的速度差異相對於每個循環執行一次SP可能是無關緊要的。 – DeanOC

相關問題