如何使用SQL Server游标
展开全部
关闭游标的语句很简单:CLOSE CustomerCursor; 使用Where子句子 我们可以动态地定义游标中的Where子句的参数,例如在本例中我们是直接定义了查询省份是北京的记录,但也许在应用中我们要使用一个下拉式列表框,由用户来选择要查询的省份,我们该怎样做呢? 我们在前面曾经提到过,DECLARE语句的作用只是定义一个游标,在OPEN语句中这个游标才会真正地被执行。了解了这些,我们就可以很方便地实现这样的功能,在DECLARE的Where子句中加入变量作参数,如下所示:DECLARE CustomerCursor CURSORFORSELCECT acct_no,name,balance
FROM customer
WHERE province=:ls_province;
∥定义ls_province的值
OPEN CustomerCursor; 游标的类型 同其它变量一样,我们也可以定义游标的访问类型:全局、共享、实例或局部,游标变量的命名规范建议也同其它变量一样。--声明游标declare my_cursor cursor keyset forselect*from info
--删除游标资源deallocate my_cursor
--打开游标,在游标关闭或删除前都有效open my_cursor
--关闭游标close my_cursor
--声明局部变量declare@idint,@namevarchar(20),@addressvarchar(20)
--定位到指定位置的记录fetch absolute 56488from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address
--定位到当前记录相对位置记录fetch relative -88from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address
--定位到当前记录前一条fetch prior from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address
--定位到当前记录后一条fetchnextfrom my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address
--定位到首记录fetch first from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address
--定位到尾记录fetch last from my_cursor into@id,@name,@addressselect@idas id,@nameas name,@addressas address 实例:use database1
declare my_cursor cursor scroll dynamic
/**//*scroll表示可随意移动游标指 针(否则只能向前),dynamic表示可以读写游标(否则游标只读)*/forselect productname from product
open my_cursor
declare@pname sysname
fetchnextfrom my_cursor into@pnamewhile(@@fetch_status=0)
begin print'Product Name: '+@pname fetchnextfrom my_cursor into@pname endfetch first from my_cursor into@pnameprint@pname/**//*update product set productname='zzg' where current of my_cursor *//**//*delete from product where current of my_cursor */close my_cursor
deallocate my_cursor 4.游标的高级技巧 尽管目前基于SQL语句的后台数据库所支持的语言都大致相当,但对游标的支持却有着一些差异,例如对滚动游标支持。所谓滚动游标,就是程序员可以指定游标向前后任意一个方向滚动。如在Informix中,您甚至还可以将游标滚向结果集开头或末尾,使用的语句分别是FETCH FIRST,FETCH LAST、FETCH PRIOR和FETCH NEXT。当程序员用FETCH语句,其缺省是指FETCH NEXT。由于滚动是在数据库后台实现的,所以滚动游标为用户编程提供了极大的方便。 对游标支持的另一个不同是可修改游标。上述游标的使用都是指只读游标,而象Oracle、Sybase等数据库却另外支持可作修改的游标。使用这样的数据库,您可以修改或删除当前游标所在的行。例如修改当前游标所在行的用户的余额,我们可以如下操作:UPDATE customer
SET balance=1000WHERECURRENTof customerCursor;
删除当前行的操作如下:
WHERECURRENTOF CustomerCursor; 但是如果您当前使用的数据库是Sybase,您需要修改数据库的参数,将游标可修改的值定为1,才能执行上述操作。这一赋值在连接数据库的前后进行均可。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询