Sql Server系列:游标

1. 游标简介

  游标是一种处理数据的方法,主要用于存储过程、触发器和Transact-SQL脚本中。SELECT语句返回的是一个结果集,游标能够从包含多条数据记录的结果集中每次提取一条记录。

  游标的特点:

  ◊ 允许对由SELECT查询语句返回的行集中的每一行执行相同或者不同的操作,而不是对整个集合执行同一个操作。

  ◊ 提供对基于游标位置的表中的行进行删除和更新。

2. 游标的基本操作

2.1 声明游标

  声明游标语法:

ISO Syntax
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
     FOR select_statement
     [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]
[;]
Transact-SQL Extended Syntax
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]
     [ FORWARD_ONLY | SCROLL ]
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
     [ TYPE_WARNING ]
     FOR select_statement
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]

2.2 打开游标

  在使用游标之前,必须打开游标。打开游标的语法格式:

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

2.3 读取游标中的数据

  打开游标之后,可以读取游标中的数据。FETCH用来读取游标中的某一行数据。FETCH语句的语法格式:

FETCH
          [ [ NEXT | PRIOR | FIRST | LAST
                    | ABSOLUTE { n | @nvar }
                    | RELATIVE { n | @nvar }
               ]
               FROM
          ]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ] 

2.4 关闭游标

  在不使用游标的时候,可以将其关闭,以释放游标所占用的服务器资源。关闭游标CLOSE语法格式:

CLOSE { { [ GLOBAL ] cursor_name } | cursor_variable_name }

2.5 释放游标

  游标操作的结果集空间虽然被释放了,但是游标结构本身也会占用一定的资源,所以在使用完游标之后,为了收回被游标占用的资源,应该讲游标释放。释放游标DEALLOCATE语法格式:

DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }
时间: 2024-12-14 19:04:32

Sql Server系列:游标的相关文章

SQL Server 系列文章快速导航(SWF版)

一.前言 在博客园写博客不自不觉已经有5个年头了,一开始只是为了记录工作中遇到的问题和解决办法,后来写的文章不自不觉的侧重在SQL Server方面的技术文章,在2014年1月终于鼓起勇气申请了微软SQL Server方面的最有价值专家(MVP),并荣幸的在4月份获得此殊荣. 今天整理了下文章,为了让大家更容易检索到(这里指人而不是所谓的SEO)我的文章,所以生成了一份SWF,以图形的方式,大家可以通过里面的链接快速进入文章,而且大家也可以下载这份SWF到本地,同样可以快速浏览. 二.SQL S

SQL Server系列文章目录

这里整理了我学习SQL Server的所有文章,包括从基础到高级的. 一,SQL Server数据类型 1,SQL Server中开发常用的数据类型 二,单表查询和多表查询   三,增,删,改   四,表和视图   五,存储过程   六,事务和并发   七,临时表   八,动态SQL   九,错误处理   十,SQL Server常用函数 SQL Server系列文章目录

一个Sql Server 的游标与循环嵌套的存储过程用例

一个Sql Server 的游标与循环嵌套的存储过程用例 准备代码 --创建表 CREATE TABLE everyoneAVG ( ID int primary key identity(1,1), AccNo INT, AVGTime INT, AddTimes INT ); DROP TABLE everyoneAVG; SELECT ID,AccNo AS '用户号',AVGTime/60 AS '平均充值时间间隔(小时)',AddTimes AS '总充值次数' FROM everyo

SQL Server之游标的基础知识

什么是游标: 游标是可以在结果集中上下游动的指针. 游标的作用: --允许定位到结果集中的特定行. --从结果集的当前位置检索一行或多行数据. --支持对结果集中当前位置的行进行修改. 注意:游标虽然很好用,但是如果滥用游标的话,会对程序的性能造成很大影响,使用的时候一定要谨慎啊! 游标的种类: MS SQL SERVER 支持三种类型的游标:Transact_SQL 游标,API 服务器游标和客户游标. (1) Transact_SQL 游标 Transact_SQL 游标是由declare

SQL SERVER CURSOR游标的使用(转载)

一:认识游标 游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集. 使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式. 用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合. 游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录. 二:游标的基本形式 声明游标:形式1DECLARE cursor_name [INSENSITIVE] [SCROLL] CURS

sql server 的游标

-- sql server 中的游标 --声明游标 /* declare cursorname [insensitive] [scroll] cursor for <select-查询块> [for {read only|update[of<列名>[,...,n]]}] Insensitive 表示把取出来的数据存入一个在tempdb库中创建的临时表,任何通过这个游标进行的操作,都会在这个临时表里进行.所有对基本表的改动都不会在用游标进行的操作中体现出来,不用该关键字,则用户对基本

Sql Server系列:Microsoft SQL Server Management Studio模板资源管理器

模板资源管理器是Microsoft SQL Server Management Studio的一个组件,可以用来SQL代码模板,使用模板提供的代码,省去每次都要输入基本代码的工作. 使用模板资源管理器的步骤: 1>. 打开Microsoft SQL Server Management Studio主界面之后,选择[视图]->[模板资源管理器],打开[模板浏览器]窗口. 2>. 模板资源管理器按代码类型进行分组,可以双击打开Database目录下的Create Database模板,查看如

Sql Server系列:索引基础

1. 索引概念 索引用于快速查找在某个列中某个特定值的行,不使用索引,数据库必须从第1条记录开始读完整个表,知道找出需要的行.表越大,查询数据所花费的时间越多.如果表中查询的列有索引,数据库能快速到达一个位置去查找数据,而不必遍历所有数据. 索引是一个单独的.存储在磁盘上的数据库结构,包含对数据表里所有记录的引用指针.使用索引用于快速找出一个或多个列中有特定值的行,对相关列使用索引是降低查询操作时间的最佳途径.索引包含由表或试图中的一列或多列生成的键. 索引的优点: ◊ 通过创建唯一索引,可以保

Sql Server系列:分区表操作

1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设定的标准划分成区域存储在不同的文件组中,使用分区可以快速而有效管理和访问数据子集. 1.1> 适合做分区表的情况 ◊ 数据库中某个表的数据很多,在查询数据时会明显感觉到速度很慢,这个时候需要考虑分区表: ◊ 数据是分段的,如以年份为分隔的数据,对于当年的数据经常进行增删改查操作,而对于往年的数据几乎

Sql Server系列:排序函数

在SQL Server中有4个排序函数:ROW_NUMBER().RANK().DENSE_RANK()及NTILE()函数. 1. ROW_NUMBER()函数 ROW_NUMBER()函数为每条记录添加递增的顺序数值序号,即使存在相同的值也递增序号. 示例: SELECT ROW_NUMBER() OVER (ORDER BY [CategoryID] DESC) AS ROWID, [CategoryID], [CategoryName] FROM [dbo].[Category]