光标变量用来存储光标定义的一个引用。由变量定义的光标定义为局部光标(因为不可能定义成全局变量),在一些命令中可以直接用变量来代替光标的引用,如命令OPEN、FETCH、CLOSE及DEALLOCATE。光标变量支持所有的Transact-SQL光标语法,与可修改光标一样,可以定义为只读的。光标变量和光标数据类型与普通的变量和数据类型使用情况大多数都一样,只有三点例外:
1.不可以将表的列定义为光标类型。
2.不可以把光标定义成存储过程的输入参数(但可以定义成输出参数)。
示例:
use practiceDB
GO
CREATE PROC exampleProcForCursor @cursor_input cursor varying out
as
fetch @cursor_input
while(@@FETCH_STATUS=0)
BEGIN
FETCH @cursor_input
END
CLOSE @cursor_input
DEALLOCATE @cursor_input
GO
DECLARE @c CURSOR
set @c=cursor for select * from name
exec exampleProcForCursor @c out
3.不可以用SELECT语句给光标变量赋值(必须使用SET命令进行赋值)。
赋值方式:
<1>declare @cursor cursor for select * from name
<2>declare @cursor cursor
set @cursor=cursor for select * from name