T-SQL数据类型的细微差别(四)

光标变量:
光标变量用来存储光标定义的一个引用,由变量定义的光标定义为局部光标,在一些命令中可以直接用光标变量来代替光标的引用,如命令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书籍。
posted @ 2006-12-20 23:05  斯伯内德  阅读(744)  评论(0编辑  收藏  举报