按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
了 FETCH 命令以外其他的命令不得修改 @@sqlstatus 变量 该变量可以取下表三个值中
的一个 下表是在 Transcat…SQL 参考手册中给出的
Status Meaning
0 Successful pletion of the FETCH statement。
1 The FETCH statement resulted in an error。
2 There is no more data in the result set。
而变量 @@rowcount 则返回上次一 FETCH 命令设置的行号 你可以用它来确定当前
游标结果集的行数
下边的代码给出了 FETCH 命令的扩充使用方法 你现在可以使用 While Loop 命令和
变量@@sqlstatus 来翻阅当前的游标
INPUT
1》 declare @name char(30)
2》 declare @homebase char(40)
3》 declare @style char(20)
4》 declare @artist_id int
5》 fetch Artists_Cursor into @name; @homebase; @style; @artist_id
6》 while (@@sqlstatus = 0)
7》 begin
8》 print @name
264
…………………………………………………………Page 265……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
9》 print @homebase
10》 print @style
11》 print char(@artist_id)
12》 fetch Artists_Cursor into @name; @homebase; @style; @artist_id
13》 end
14》 go
分析
现在你已经有了一个全功能的游标 下边要做的工作就是关闭游标
关闭游标
关闭游标是一个非常简单的工作 它的语句如下
SYNTAX
close cursor_name
这时游标依然存在 但是 它必须被再次打开方可使用 关闭一个游标从本质上来说
是关闭了它的结果集 而并不是它的全部内容 如果你已经完全结束了对一个游标的使用
的话 DEALLOCATE 命令将释放让游标所占用的内存并且可以让游标的名字可以被再次
使用 这是该命令的语法格式
SYNTAX
deallocate cursor cursor_name
例 13。4 给出了用 Transcat…SQL 写的创建 使用 关闭 释放一个游标的完整过程
Example 13。4
INPUT
1》 declare @name char(30)
2》 declare @homebase char(40)
3》 declare @style char(20)
4》 declare @artist_id int
5》 create Artists_Cursor cursor
6》 for select * from ARTISTS
7》 open Artists_Cursor
265
…………………………………………………………Page 266……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
8》 fetch Artists_Cursor into @name; @homebase; @style; @artist_id
9》 while (@@sqlstatus = 0)
10》 begin
11》 print @name
12》 print @homebase
13》 print @style
14》 print char(@artist_id)
15》 fetch Artists_Cursor into @name; @homebase; @style; @artist_id
16》 end
17》 close Artists_Cursor
18》 deallocate cursor Artists_Cursor
19》 go
注 下边是示例所用的数据
OUTPUT:
Soul Asylum Minneapolis Rock 1
Maurice Ravel France Classical 2
Dave Matthews Band Charlottesville Rock 3
Vince Gill Nashville Country 4
Oingo Boingo Los Angeles Pop 5
Crowded House New Zealand Pop 6
Mary Chapin…Carpenter Nashville Country 7
Edward MacDowell U。S。A。 Classical 8
游标的适用范围
与表 索引以及其它的对象如触发机制和存贮过程不同 游标在创建以后并不作为一
个数据库对象来看待 所以 游标的使用会受到一些限制
警告 切记 无论何时要注意游标分配过的内存 尽管它的名字可能已经不存在了 当不
在使用游标的时候 或在进行游标能力之外的工作时 一定要记得关闭游标并将它
释放掉
可以在下列三种情况下创建游标
l 在会话中 — — 会话在用户登录以后开始 如果用户在登录进行 SQL SERVER 以后创建
了一个游标 那么游标的名字将一直存在到用户退出登录 用户不能再一次使用在本
266
…………………………………………………………Page 267……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
次登录中创建的游标名
l 在存贮过程中— — 游标在存贮过程的内部创建的好处在于只有当过程运行时它才真正
起作用 一旦过程退出了 则游标的名字将不再有效
l 在触发机制中— — 在触发机制中创建游标与在存贮过程中创建游标所受到的限制是相
同的
创建和使用存贮过程
存贮过程是一个专业数据库编程人员必须掌握的概念 存贮过程可以在最大程序上发
挥出 SQL 的潜能 该功能可以被如 C FORTRAN 或 VISUAL BASIC 象调用或执行自己
的函数一样地调用或执行 存贮过程应该是一组经过压缩处理的经常使用的一组命令 如
交叉表的查询 更新和插入操作 存贮过程允许程序员简单地将该过程作为一个函数来调
用而不是重复地执行过程内部的语句 而且 存贮过程还有些附加的优点
SyBase 工业有限公司是使用存贮过程的先驱 它早在 1980 年就在它的 SQL SERVER
中提供了存贮过程功能 这种过程是作为数据库的一部分被创建的 它与表 索引一样是
存贮在数据库的内部的 Transcat…SQL 允许在过程调用中提供输入或输出的参数 这种机
制可以让你写出通用的存贮过程并将变量传递给它
使用存贮过程的一个最大的优点在于它可以在设计的阶段执行 当在一个网站中执行
大批量的 SQL 语句时 你的应用程序会不停地不 SQL SERVER 进行