SQL Server 2008 游标使用实例
本文使用以下两张数据库表作为演示对象。
1 游标初探--使用游标进行遍历
declare @classAndStudent table(
class_id int, --班级ID
class_name nchar(10), --班级名称
teacher nchar(10), --教师
id int, --学生ID
name nchar(10), --学生名称
age int --学生年龄
); declare @ClassId int; --班级ID
declare @ClassName nchar(10); --班级名称
declare @Teacher nchar(10); --教师
declare @Id int; --学生ID
declare @Name nchar(10); --学生名称
declare @Age int; --学生年龄 insert into @classAndStudent
select t1.classid,t1.classname,t1.teacher,t2.id,t2.name,t2.age from tb_Class t1,tb_Student t2 where t1.classid =t2.classid declare @cursor cursor;--游标
set @cursor=cursor for
select class_id,class_name,teacher,id,name,age from @classAndStudent;
open @cursor
fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;
while @@FETCH_STATUS=0
begin
if(@Age<20 and @Teacher='wsp')
begin
update tb_Student set classid=1 where id=@ID
end
fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;
end
close @cursor
deallocate @cursor
先简单解释一下上面代码到底做了些什么事。
代码一开始定义表类型变量@classAndStudent,用来保存学生与班级的信息,随后使用游标来遍历表变量(http://support.microsoft.com/?kbid=305977)@classAndStuden,在遍历过程中,将学生年龄小于20,且教师名称为“wsp”的学生的班级置为1。
接下来,对游标的使用做简单的说明。
1)声明游标:确定游标的属性,制定游标的查询结果集。
declare @cursor cursor;--游标
set @cursor=cursor for
select class_id,class_name,teacher,id,name,age from @classAndStudent;
2)打开游标:编译sql server定义游标的select语句,并行成结果集。
open @cursor
3)获取数据:通过游标以行的单位从结果集中获取数据。
fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;
4)关闭游标:停止处理查询。
close @cursor
5)释放游标:释放分配给游标的所有存储资源。
deallocate @cursor
查看执行结果:
select * from @classAndStudent
select * from tb_Student
结果为:
2 游标进阶--游标嵌套
简单修改上面的代码,即可以完成游标嵌套操作。
增加以下变量的声明。
declare @subcursor cursor;--子游标
declare @subClassID int;
修改if(@Age<20 and @Teacher='wsp')条件下的代码。
if(@Age<20 and @Teacher='wsp')
begin
set @subcursor=cursor for select t.class_id from tb_class t where t.class_id=@ClassId
open @subcursor
fetch next from @subcursor into @subClassID
while @@FETCH_STATUS=0
begin
--做你想做的
--是男人,想做就做呗
fetch next from @subcursor into @subClassID
end
close @subcursor
deallocate @subcursor
End
这里其实就是新增了一个游标@subcursor来遍历表tb_class的class_id而已。没什么好难解释的了,再说例子中也没有给出具体的实际操作,仅给出了游标嵌套的代码架子而已,在实际代码中大家可以灵活变更。
SQL Server 2008 游标使用实例的更多相关文章
- SQL Server 2008 数据库镜像部署实例之三 配置见证服务器
SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ...
- SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移
SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移 上一篇文章已经为配置镜像数据库做好了准备,接下来就要进入真正的配置阶段 一.在镜像数据库服务器上设置安全性并启动数据 ...
- SQL Server 2008 数据库镜像部署实例之一 数据库准备
SQL Server 2008 数据库镜像部署实例之一 数据库准备 一.目标 利用Sql Server 2008 enterprise X64,建立异步(高性能)镜像数据库,同时建立见证服务器实现自动 ...
- 转载 SQL Server 2008 R2 事务与隔离级别实例讲解
原文:http://blog.itpub.net/13651903/viewspace-1082730/ 一.事务简介 SQL Server的6个隔离级别中有5个是用于隔离事务的,它们因而被称作事务隔 ...
- SQL SERVER 2008 R2安装的时候提示“该实例名称MSSQLSERVER已在使用
SQL SERVER 2008安装的时候提示“该实例名称已在使用”解决办法._冷雨玫瑰_新浪博客---和这文章描述差不多http://blog.sina.com.cn/s/blog_672b419f0 ...
- SQL Server 2008性能故障排查(四)——TempDB
原文:SQL Server 2008性能故障排查(四)--TempDB 接着上一章:I/O TempDB: TempDB是一个全局数据库,存储内部和用户对象还有零食表.对象.在SQLServer操作过 ...
- SQL Server 2008性能故障排查(二)——CPU
原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...
- SQL Server 2008 R2 性能计数器详细列表(二)
原文:SQL Server 2008 R2 性能计数器详细列表(二) SQL Server Buffer Partition 对象: 提供计数器来监视 SQL Server 如何使用可用页 SQL S ...
- SQL Server 2008 R2 性能计数器详细列表(一)
原文:SQL Server 2008 R2 性能计数器详细列表(一) SQL Server Backup Device 计数器: 可监视用于备份和还原操作的 Microsoft SQL Server ...
随机推荐
- percona-xtrabackup安装及使用教程
安装percona-xtrabackup依赖包(前提已安装mysql) yum -y install perl-CPAN perl-DBD-MySQL perl make gcc gcc-c++ pa ...
- POJ - 1523 SPF
题目要求割顶集,并且还要求出去掉割顶之后剩下的图连通数目. tarjan算法求出割顶后直接枚举就可以了吧. 一开始想到利用iscut[u]的次数也就是点u被判定为割顶的次数求连通分量数,还有利用与结点 ...
- Java泛型反射机制(一)
/** * * @author Administrator * 功能:泛型的必要性(参数化类型)(安全简单) */ package com.test; import java.util.*; publ ...
- 《ArcGIS Engine+C#实例开发教程》
原文:<ArcGIS Engine+C#实例开发教程> 摘要:<ArcGIS Engine+C#实例开发教程>,面向 ArcGIS Engine(以下简称AE)开发初学者,本教 ...
- 【HDOJ】1076 An Easy Task
水题,如题. #include <stdio.h> #define chk(Y) (Y%4==0 && Y%100!=0) || Y%400==0 int main() { ...
- USACO3.24Feed Ratios
直接枚举到100水过 /* ID: shangca2 LANG: C++ TASK: ratios */ #include <iostream> #include<cstdio> ...
- MFC框架
第一点:类别型录网的搭建: 类别型录网搭建的目的是为了实现所谓的"执行期类型识别",也就是在程序运行的时候识别出某个对象是否是某个类的实例(基类也可以).这里还不是很明白为什么需要 ...
- 转 脸书pop动画的五个步骤
http://blog.csdn.net/u013741809/article/details/38511741 5 Steps For Using Facebook Pop // 1. Pick ...
- [OpenSource]浅谈.Net和Java互相调用的三种方式
在很多的大型系统开发中,开发工具往往不限制于同一种开发语言,而是会使用多种开发语言的混合型开发.目前Java和.Net都声称自己占85%的市场份额,不管谁对谁错,Java和.Net是目前应用开发的两个 ...
- tomcat 服务器全解
①B/S.C/S比较 ⑴C/S C/S结构即客户端/服务器(Client/Server),例如QQ: 需要编写服务器端程序,以及客户端程序,例如我们安装的就是QQ的客户端程序: 缺点:软件更新时需要同 ...