2012-03-05 71 views
3

我有一個SQL存儲過程,需要使用不同的參數執行多次。是否有可能執行某種類似於數組或其他不同參數的數據結構執行多次的SQL腳本?對此有何想法?使用不同參數多次執行SQL查詢

+0

哪裏的參數來自存儲過程?一個數據庫表? – 2012-03-05 20:22:04

+0

是的。表中的特定列不能少。 – SoftwareSavant 2012-03-05 20:23:17

+1

可以循環訪問表中的列值,並將它們用作存儲過程調用中的參數。但是,這可能會很慢。有時候更好(甚至有可能)將存儲過程重寫爲非過程化SQL。當然,你還沒有顯示你的代碼,所以不可能說出你的情況最好。 – 2012-03-05 20:27:36

回答

5

你可以使用遊標(但是否有可能調整你的代碼,嘗試YS's answer):

編輯:添加FAST_FORWARD按@ YS的建議

DECLARE @param INT 

-- getting your parameter from the table 
DECLARE curs CURSOR LOCAL FAST_FORWARD FOR 
    SELECT afield FROM atable WHERE ... 

OPEN curs 

FETCH NEXT FROM curs INTO @param 

-- executing your stored procedure once for every value of your parameter  
WHILE @@FETCH_STATUS = 0 BEGIN 
    EXEC usp_stored_Procedure @param 
    FETCH NEXT FROM curs INTO @param 
END 

CLOSE curs 
DEALLOCATE curs 
+4

如果光標是隻讀的,則可以考慮使用'FAST_FORWARD'來提高性能,並且您只能繼續前進。即:'DECLARE curs CURSOR LOCAL FAST_FORWARD FOR ...' – 2012-03-05 20:29:54

+0

@YS:你是對的。感謝您的建議! – 2012-03-05 20:33:43

+0

這實際上工作得很好。我需要處理我的T-SQL – SoftwareSavant 2012-03-05 20:43:31

5

我可能會重組該設計有點適合需要(以解決光標的問題) - 即:

  • 插入要在s中執行的值tored PROC到一個臨時表,然後調用存儲過程(那麼存儲過程將讀取臨時表)

  • 呼叫使用表值參數