Sql-Server-2008-R2

在我的while循環中使用游標或其他東西?

  • November 4, 2013

從網上的閱讀來看,似乎不贊成使用游標,但似乎沒有人提供過它們的替代方案。在我的情況下,我需要通過 select 語句的結果逐行設置,並將每行中的幾列傳遞到另一個儲存過程中進行處理。我看到這樣做的唯一方法是創建一個游標並執行一個while循環以使用游標抓取每一行,以便處理數據。那麼是使用游標單步執行 select 語句中的每一行以處理執行此操作的最佳方法還是有其他方法?就我而言,我必須確保處理每一行。

理想情況下,您應該更改其他儲存過程以在集合上工作,而不是獲取單獨的值(或創建一個在集合上工作的新儲存過程)。如果您在過程中顯示實際邏輯和受影響表的架構,而不是僅僅將高級流程描述為文字問題,您可以獲得一些想法。避免多次呼叫該過程的一種方法是使用表值參數將不同行的值作為一個集合傳遞(但這同樣需要重新編寫過程或創建一個新過程)。

同時,如果您絕對必須使用循環,您也必須願意接受性能後果。一種抵消這些影響的方法——如果你真的將游標用作只讀的、單次通過集合——是在聲明游標時使用以下關鍵字:

DECLARE c CURSOR LOCAL FAST_FORWARD
FOR SELECT ...

更多資訊在這裡:

http://www.sqlperformance.com/2012/09/t-sql-queries/cursor-options

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