- 1、本文档共65页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL应用程序示例
SQL Server 2005实例教程;教学目标;本章导航;1、游标(Cursor)的定义:
关系数据库中的操作会对整个行集产生影响,由SELECT语句返回的行集包括所有满足该语句中WHERE子句中条件的行,所返回的所有行被称为结果集。游标允许用户访问处理结果集中的一行或部分行,而不是对整个行集进行操作。
SQL Server 2005通过游标提供了对一个结果集进行逐行处理的能力。游标也可以被看作是一个表中的记录指针,该指针与某个查询结果集相联系。;2、游标的优点如下:
允许定位在结果集的特定行。
从结果集的当前位置检索一行或多行。
支持对结果集中当前位置的行进行数据修改。
注意:游标实际上作为面向集合的数据库管理系统和面向行的程序设计的桥梁,使得这两种处理方式通过游标沟通起来。;3、在SQL Server 2005中使用游标的一般步骤如下:
(1)声明游标(DECLARE CURSOR)。
(2)打开游标(OPEN CURSOR)。
(3)提取游标(FETCH CURSOR)。
(4)根据需要,对游标中当前位置的行执行修改操作(更新或删除)。
(5)关闭游标(CLOSE CURSOR)。
(6)释放游标(DEALLOCATE CURSOR)。;(1)声明游标
声明游标是指利用SELECT查询语句创建游标的结构,指明游标的结果集中包含哪些数据。
格式:DECLARE cursor_name --指定游标名
[INSENSITIVE][SCROLL]CURSOR --指定游标类型
FOR
SELECT_statement --指定查询语句
说明:
INSENSITIVE:游标结果集合会被拷贝到一个临时表(tempdb)中,所有对游标的操作都是基于该临时拷贝数据。则基表数据修改不能反映到当前游标结果集中。
SCROLL:为滚动游标,否则为只进游标;(2)打开游标
声明了游标后,必须打开才能使用。T-SQL提供了打开游标语句OPEN。
格式:OPEN cursor_name
说明:
当游标打开成功时,游标位置指向结果集的第一行之前。
只能打开已经声明但尚未打开的游标。;(3)读取数据
打开游标后,就可以从结果集中提取数据了。
格式:FETCH [[NEXT|PRIOR|FIRST|LAST|ABSOLUTE { n | @nvar}| RELATIVE {n| @nvar} ] FROM] cursor_name [INTO 变量名列表]
说明:
NEXT:表示提取下一条记录(默认)。
PRIOR:表示提取前一条记录。
FIRST:表示提取第一条记录。
LAST:表示提取最后一条记录。
ABSOLUTE n :若为正,则返回游标头开始的第n行,若为负,则返回游标末尾开始的第n行。若为0,则不返回行。
RELATIVE { n | @nvar}:若为正数,则返回当前行开始的第n行,若为负,则返回当前行之前的第n行。若为0,则返回当前行
[INTO 变量名列表]:允许将提取操作的列数据放到局部变量中。要求变量数与列数相等,结果一致
@@ROWCOUNT:保存自游标打开后第一个FETCH语句至最近FETCH语句为止,已从游标结果集中提取的行数。。
注意:只进游标只能使用next提取类型,其余皆不可能,而滚动游标则可以使用以上所有类型。;5、关闭游标
如果一个已打开的游标暂时不用,就可以关闭。T-SQL提供了关闭游标语句CLOSE。
格式:CLOSE 游标名
注意:
关闭游标即删除游标当前结果集合,并释放游标对数据库的所有锁定。关闭游标并不改变它的定义,要使用已关闭游标的数据,可以再次用OPEN打开。;6、释放游标
如果一个游标不需要,就可以释放。T-SQL提供了释放游标的语句DEALLOCATE。
格式:DEALLOCATE 游标名
说明:如果释放一个已经打开尚未关闭的游标,系统会自动先关闭这个游标,然后再释放。;二、游标实例;DECLARE @NO char(6),@name varchar(50),@price varchar(50)
DECLARE cur_goods CURSOR FOR
SELECT g_id,g_name,g_price FROM goods where g_status=促销
OPEN cur_goods
fetch next from cur_goods into @NO,@name,@price
print space(6)+----------商品信息表----------
print
while @@fetch_status=0
begin
print 商品号:+@no+商品名称:+@name+商品价格:+@price
fetch next from cur_g
文档评论(0)