SQL游标使用及实例

declare my_cursor cursor scroll dynamic

for
select * from t_msg

open my_cursor
declare @name sysname
fetch next from my_cursor into @name
while(@@fetch_status=0)
begin
print 'UserName: ' + @name
--fetch next from my_cursor
fetch next from my_cursor into @name
end

--fetch first from my_cursor into @name
print @name

close my_cursor
deallocate my_cursor

使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。
2. 如何使用游标:
一般地,使用游标都遵循下列的常规步骤:
(1) 声明游标。把游标与T-SQL语句的结果集联系起来。
(2) 打开游标。
(3) 使用游标操作数据。
(4) 关闭游标。
2.1. 声明游标
DECLARE CURSOR语句SQL-92标准语法格式:
DECLARE 游标名 [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR sql-statement
Eg:
Declare MycrsrVar Cursor
FOR Select * FROM tbMyData
2.2 打开游标
OPEN MycrsrVar
当游标被打开时,行指针将指向该游标集第1行之前,如果要读取游标集中的第1行数据,必须移动行指针使其指向第1行。就本例而言,可以使用下列操作读取第1行数据:
FETCH FIRST from E1cursor
或 FETCH NEXT from E1cursor
2.3 使用游标操作数据
下面的示例用@@FETCH_STATUS控制在一个WHILE循环中的游标活动

DECLARE E1cursor cursor
FOR SELECT * FROM c_example
OPEN E1cursor
FETCH NEXT from E1cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT from E1cursor
END

CLOSE E1cursor
DEALLOCATE E1cursor

2.4 关闭游标
使用CLOSE语句关闭游标
CLOSE { { [ GLOBAL ] 游标名 } | 游标变量名 }
使用DEALLOCATE语句删除游标,其语法格式如下:
DEALLOCATE { { [ GLOBAL ] 游标名 } | @游标变量名
3. FETCH操作的简明语法如下:
FETCH
[ NEXT | PRIOR | FIRST | LAST]
FROM
{ 游标名 | @游标变量名 } [ INTO @变量名 [,…] ]

参数说明:

NEXT 取下一行的数据,并把下一行作为当前行(递增)。由于打开游标后,行指针是指向该游标第1行之前,所以第一次执行FETCH NEXT操作将取得游标集中的第1行数据。NEXT为默认的游标提取选项。

INTO @变量名[,…] 把提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果列的数据类型匹配或是结果列数据类型所支持的隐性转换。变量的数目必须与游标选择列表中的列的数目一致。

--------------------------------------------------------------------------------------------------------------------------------

每执行一个FETCH操作之后,通常都要查看一下全局变量@@FETCH_STATUS中的状态值,以此判断FETCH操作是否成功。该变量有三种状态值:

? 0 表示成功执行FETCH语句。

? -1 表示FETCH语句失败,例如移动行指针使其超出了结果集。

? -2 表示被提取的行不存在。

由于@@FETCH_STATU是全局变量,在一个连接上的所有游标都可能影响该变量的值。因此,在执行一条FETCH语句后,必须在对另一游标执行另一FETCH 语句之前测试该变量的值才能作出正确的判断。

更新数据;
declare my_youbiao cursor
for select * from t_msg
for update

open my_youbiao
fetch next from my_youbiao
while @@fetch_status=0
begin
--update t_msg set msg='1234567890' where current of my_youbiao
update my_youbiao set msg='123' where current of my_youbiao
fetch next from my_youbiao
print 'asdfasd11'
end
close my_youbiao
deallocate my_youbiao
print 'asdfasd'

测试通过:


--select * frommaster..sysprocesses
use test
declare my_cursorcursor scroll dynamic
--scroll表示可以向前或向后移动
dynamic:表示可写也可读,
for
select F3from
temp --定义my_cursor 游标

open my_cursor--打开游标
declare@name
nvarchar(128)--定义一个变量
fetchnext
from my_cursorinto
@name --游标停在第一条记录前面,第一次执行,测试有没有记录存在
while(@@fetch_status=0)--取数据,直到-2即没有记录
begin
print'姓名:
' +
@name
--fetch next from my_cursor
fetchnext
from my_cursorinto
@name
end

--fetch first from my_cursor into @name
print@name
--update temp set F9='zzg' where current of my_cursor

close my_cursor
deallocate my_cursor

时间: 2024-07-30 16:01:00

SQL游标使用及实例的相关文章

PL/SQL游标(原创)

游标的相关概念及特性定义映射在结果集中某一行数据的具体位置,类似于C语言中的指针.即通过游标方式定位到结果集中某个特定的行,然后根据业务需求对该行进行相应特定的操作.游标的分类显示游标:即用户自定义游标,专门用于处理select语句返回的多行数据隐式游标:系统自动定义的游标,记录集只有单行数据,用于处理select into 和DML语句游标使用的一般过程:显示游标:声明, 打开, 读取, 关闭隐式游标:直接使用读取,声明.打开.关闭都是系统自动进行的显示游标的过程描述a.声明游标CURSOR

如何手动删除SQL Server 2000默认实例

概要 删除 Microsoft SQL Server 2000 前应考虑的事项 删除 SQL Server 的步骤 删除 SQL Server 的特定实例 删除 SQL Server 的所有已知实例 删除 SQL Server 的默认实例 删除 SQL Server 的命名实例 如何包含全文检索删除 重新安装 SQL Server 前删除临时文件夹中的内容 参考 这篇文章中的信息适用于: 概要 本文中的步骤介绍如何为重新安装 SQL Server 程序的系统做准备工作. 删除 Microsoft

sql update 语法与实例

  sql update 语法与实例 在日常使用的数据库教程是一个不断变化的数据存储.在SQL是用于修改数据已经在数据库中的更新和删除commands.The更新语句可以更新表格中的一个或多个记录命令. UPDATE table_name SET column_name = expression WHERE conditions 实例一 UPDATE AntiqueOwners SET Address = '77, Lincoln st.' WHERE OwnerFirstName= 'Jane

sql多表联查实例

  sql多表联查实例 下面提供四款sql多表关联查询的实例,个个效率不一样. select * from order_info as a ,ivrlog4ivrdlvinst as b where (a.saleorder=b.ext1_skill and b.start_date=@date1 and se_id='55' and b.ext1_skill!='') and convert(varchar(10),a.instime,112)=@date2 and max(a.instime

Ruby连接使用windows下sql server数据库代码实例

  这篇文章主要介绍了Ruby连接使用windows下sql server数据库代码实例,本文直接给出实现代码,而且给出了两种实现和access数据库的实现代码,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 req

数据库连接失败-由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例

问题描述 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例 我用的是Win7的系统,SQL Server2008和VS2010,在运行程序是出现了错误:由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例.谁知道怎么解决吗?AppDataLocalMicrosoftMicrosoft SQL Server DataSQLEXPRESS,把SQLEXPRESS删除之后还是会出现启动用户实例的进程时出错,似乎是数据库的连接问题,很苦恼,谁知道怎么解

PL/SQL 游标变量

    游标变量与游标相似,有其共性,也有其不同点.就其共性来说两者都是指向多行查询的结果集中的当前行.都要经历声明,打开,检索与关闭的过程.所不同的是游标与游标变量类似于常量与变量.游标是静态的,而游标变量是动态的,因为游标变量并不与某个特定的查询相绑定.所以,游标变量可以打开任何类型兼容的查询.其次可以将游标变量作为参数传递给本地和存储子程序.本文主要描述游标变量的使用.   一.什么是游标变量    显示游标用于命名一个工作区域,其中保存多行查询的信息,而且该游标始终指向工作区域的内容.而

安装-已经有sql server2008了想装sql server2008r2说没实例

问题描述 已经有sql server2008了想装sql server2008r2说没实例 我电脑里安装了sql server2008 和vs2010 2012 现在需要装sql server2008 r2 安装向导说没有实例.不会追加问题,只能编辑了 .服务开着呢.我不知道怎么指定实例名. [错误消息] 此计算机上没有可以更新的 SQL Server 实例或共享功能. 解决方案 看下你的sql server服务是否启动,你所指定的实例名是否正确.

Library Cache优化与SQL游标

Dear 跟着小编一起读好书运动开始啦!咱们作为DBA不仅要外部打扮自己,更要从内部武装.近期,小编将分享冷菠老师的<Oracle高性能自动化运维>一部分精选章节分享给大家.如果你对内容很感兴趣,还是要去买一本比较好哦. 冷菠 冷菠,网名悠然(个人主页http://www.orasky.net ),资深DBA,著有<Oracle高性能自动化运维>,有近10年的数据库运维.团队管理以及培训经验.曾担任美资企业Senior DBA职务.支付公司数据库团队负责人,现为培训机构重庆优唯佳科