sql游标使用与语法
以[master].[dbo].[spt_values] 表为例:
QL游标语法及举例
游标定义:
每一个游标必须有四个组成部分这四个关键部分必须符合下面的顺序;
1、DECLARE 游标
2、OPEN 游标
3、从一个游标中FETCH 信息
4、CLOSE 或DEALLOCATE 游标
通常使用DECLARE 来声明一个游标,游标声明包括如下内容:
1、游标名字
2、数据来源(表和列)
3、选取条件
属性(仅读或可修改)
语法格式:
其中:
cursor_name
指游标的名字。
INSENSITIVE
表明MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。
对该游标的读取操作皆由临时表来应答。
因此,对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同时也无法通过游标来更新基本表。
如果不使用该保留字,那么对基本表的更新、删除都会反映到游标中。
注意,当遇到以下情况发生时,游标将自动设定INSENSITIVE 选项。
在SELECT 语句中使用DISTINCT、 GROUP BY、 HAVING UNION 语句;
使用OUTER JOIN;
所选取的任意表没有索引;
将实数值当作选取的列。
SCROLL
表 明所有的提取操作(如FIRST、 LAST、 PRIOR、 NEXT、 RELATIVE、 ABSOLUTE)都可用。如果不使用该保留字,那么只能进行NEXT 提取操作。由此可见,SCROLL 极大地增加了提取数据的灵活性,可以随意读取结果集中的任一行数据记录,而不必关闭再
重开游标。
select_statement
是定义结果集的SELECT 语句。应该注意的是,在游标中不能使用COMPUTE、COMPU- TE BY、 FOR BROWSE、 INTO 语句。
READ ONLY
表明不允许游标内的数据被更新尽管在缺省状态下游标是允许更新的。而且在UPDATE或DELETE 语句的WHERE CURRENT OF 子句中,不允许对该游标进行引用。
UPDATE [OF column_name[,…n]]
定义在游标中可被修改的列,如果不指出要更新的列,那么所有的列都将被更新。当游标被成功创。