游標變數:
游標變數用來儲存游標定義的一個引用,由變數定義的游標定義為局部游標,在一些命令中可以直接用游標變數來代替游標的引用,如命令OPEN, FETCH, CLOSE及DEALLOCATE游標變數支援所有的T-SQL游標文法,與可修改游標一樣,可以定義為唯讀,游標變數和游標資料類型與普通變數和資料類型使用方式大多數都一樣,只有三點例外:
(1)不可以將表的列定義為游標類型。
(2)不可以把游標定義成預存程序的輸入參數(但是可以定義成輸出參數)
(3)不可以用SELECT語句給游標變數賦值(必須使用SET命令進行賦值)
例如:
DECLARE @cursor CURSOR
SET @cursor = CURSOR FOR SELECT * FROM authors
OPEN @cursor
FETCH @cursor
WHILE (@@FETCH_STATES = 0)
BEGIN
FETCH @cursor
END
CLOSE @cursor
DEALLOCATE @cursor
游標變數還可用已有的游標賦值。
例如:
DECLARE @cursor CURSOR
DECLARE c CURSOR FOR SELECT * FROM authors
SET @cursor =c
OPEN @cursor
FETCH @cursor
WHILE (@@FETCH_STATES = 0)
BEGIN
FETCH @cursor
END
CLOSE @cursor
DEALLOCATE @cursor
DEALLOCATE c
單獨釋放游標和游標變數,它將仍然在記憶體中,直到直接釋放或者是最後的應用變數超出範圍,兩種條件任何一種都可以完全釋放游標,將一個普通游標賦值給了一個游標變數之後,釋放原始游標並不能禁止通過使用游標變數來繼續訪問。釋放一個游標引用而不是最後一個引用,只能是刪除了通過這種途徑訪問游標的能力,游標本身仍然存在,直到最後一個引用變數被釋放或是超出範圍。
以上內容是《Transact-SQL權威指南》一書的讀書筆記,感謝作者KEN HENDERSON 和 譯者 健蓮科技 中國電力出版社 為我帶來這麼經典的T-SQL書籍。