首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MS SQL Server 游標進階應用:變數與巢狀游標實戰

     編輯:關於SqlServer

前幾節已詳細說明游標的宣告、讀取、關閉與釋放語法。本節透過實際案例,示範游標變數與巢狀游標在預存程序中的進階應用,幫助開發者更靈活地處理複雜結果集。

13.7.1 游標變數的應用

游標變數自 SQL Server 7.0 起引入,常用於預存程序、觸發器中傳遞結果集。系統預存程序 sp_cursor_list 即為典型範例:其內部宣告游標變數 @cursor_return,並以 OUTPUT 選項將結果集回傳給呼叫端,結果集包含當前所有游標的屬性值。

提示:在預存程序中,若游標變數使用 OUTPUT 選項,必須加上 VARYING 關鍵字,語法為 @variable CURSOR VARYING OUTPUT。

範例 13-9:在用戶端程式處理伺服器擷取的資料

建立包含游標的預存程序 jobs_cursor,供用戶端應用程式呼叫並逐筆處理伺服器端傳回的資料列。步驟如下:

  1. 刪除同名預存程序(若存在)。
  2. 建立 jobs_cursor,宣告游標變數並開啟游標,最後將游標變數以 OUTPUT 輸出。

刪除預存程序 建立預存程序 宣告游標變數 開啟游標並輸出

13.7.2 巢狀游標

為靈活處理多層次結果集,可在預存程序中使用多層游標。外層游標負責主資料集(如作者資料),內層游標針對每一筆外層資料查詢相關明細(如該作者的書籍),適用於產生巢狀報表的情境。

範例 13-10:雙層游標產生作者與書籍巢狀報表

  1. 第一層游標:依參數篩選 authors 表資料。
  2. 逐筆讀取第一層游標的作者記錄。
  3. 對每位作者,開啟第二層游標查詢其相關書籍資訊。
  4. 依序輸出巢狀結果。

宣告外層游標 宣告內層游標 開啟外層游標 迴圈處理外層 處理內層游標

總結

游標變數讓結果集能在程式模組間傳遞,巢狀游標則支援多層次資料的逐筆處理。兩者結合,極大擴展了 T-SQL 在複雜報表、批次處理等場景的表達能力。實務上應注意游標的效能開銷,僅在確實需要逐列處理時使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved