2015-01-13 75 views

回答

3

遊標是一個循環構造內置數據庫引擎,並具有各種各樣的功能。遊標允許您獲取一組數據,遍歷每條記錄,並根據需要修改值;那麼,您可以輕鬆地將這些值分配給變量並對這些值執行處理。根據您請求的光標類型,您甚至可以提取您之前提取的記錄。

由於遊標是數據庫引擎中的實際對象,因此在創建遊標和銷燬遊標時會有一些額外開銷。另外,大多數遊標操作都發生在tempdb中,因此大量使用的tempdb會因使用遊標而更加重載。

WHILE循環是一種編程結構,您可能從其他編程語言中熟悉。您可以在循環的開始處定義一個條件,只要此條件保持爲真,就會發生迭代。

WHILE循環與遊標一樣易於使用,但有時這些結構難以閱讀和/或理解,因爲查詢必須發生在基表上,必須獲取單個下一個行。在底層基表沒有主鍵列(它應該有)的情況下,這種操作非常棘手。

WHILE循環不提供遊標附帶的一些花裏胡哨的功能,例如在結果集中輕鬆地「倒退」的功能。雖然,我從來沒有遇到過除了通過帶有遊標的結果集進行直線循環之外的其他任何事情。

WHILE循環的一個優點是不必在內存中創建對象,以方便通過一組記錄來循環使用遊標所需的內容。

編輯

如果要分析兩者的功能,你可以寫用遊標聲明以及while循環和分析的使用SQL Server Profiler進行讀取的數量。這個工具會給我一個組合的每個記錄的讀數,而不是每個記錄。經驗法則表示,無論哪個更快,更好。