`
linuxstuding
  • 浏览: 1231700 次
文章分类
社区版块
存档分类
最新评论

备份以下表:

 
阅读更多

SQL SERVER 参考:游标(Cursor)的讲解与实例

每一个游标必须有四个组成部分这四个关键部分必须符合下面的顺序;

1.DECLARE 游标
2.OPEN 游标
3.从一个游标中FETCH 信息
4.CLOSE 或DEALLOCATE 游标

通常我们使用DECLARE 来声明一个游标声明一个游标主要包括以下主要内容:

游标名字
数据来源(表和列)
选取条件
属性(仅读或可修改)
其语法格式如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR
FOR select_statement
[FOR {READ ONLY | UPDATE [OF column_name [,...n]]}]

其中:
cursor_name 指游标的名字。

INSENSITIVE

表明MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。对该游标的读取操作皆由临时表来应答。因此,对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同时也无法通过游标来更新基本表。如果不使用该保留字,那么对基本表的更新、删除都会反映到游标中。

游标指针示意图

详细:

1.定义一个标准游标:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->declare mycursor cursor for select * from yuangong

2.定义一个只读游标:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->declare mycursor cursor for select * from yuangong for read only

3.定义一个可写游标:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->declare mycursor1 cursor for select * from yuangong for update of

姓名,性别,年龄,基本工资,奖金,所得税,应发工资
注: scroll 只能对只读游标起作用

4.打开游标:open 游标名

如:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->declare mycursor cursor for select * from yuangong
open mycursor

5.从游标中取数据:fetch,默认情况下,指针指向第一条记录之前

移动记录指针的方法:
NEXT 下移一条记录
prior 上移一条记录
first 第一条记录
LAST 最后一条记录
absolute n 绝对记录 第N条记录

取数据语法:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->fetch next|prior|first|last|absolute nfrom 游标名 [into 变量名列表]

6.关闭游标: close 游标名
暂时关闭游标,还可再使用OPEN打开.

7.释放游标: deallocate 游标名

内存中清除游标.如果还想使用,必须再次声明.

对当前游标状态进行判断:

8. @@fetch_status 如果返回是0,说明当前操作是成功的.否则是失败的.
0 FETCH 语句成功。
-1 FETCH 语句失败或此行不在结果集中。
-2 被提取的行不存在。

举例1:

利用游标从学生表中逐条读取所有数据:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->declare @i INT
DECLARE @TN CHAR(8),@FU CHAR(20)
declare mycursor cursor for select sno,sname from student
open mycursor
select @i=count(*) from student
while @@fetch_status=0 and @i>1
BEGIN
fetch next from mycursor INTO @TN,@FU
set @i=@i-1
PRINT @TN + ' ' + @FU
END
close mycursor
deallocate mycursor

结果:
s1001 Jack Dong
s1002 Lucy Dong
s1003 Brezse Dong
s1004 Andy Liu
s1005 Jack Chen

举例2:

通过游标对读取的数据进行操作,并输出不同的结果:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->declare @s_name varchar(20),@c_name VARCHAR(64),@sc_core int
declare my_cur cursor for select sname,cname,scgrade
from student s, course c, studentCourse sc WHERE s.sno=sc.sno AND c.cno=sc.cno
open my_cur
print space(27)+'2007年计算机专业考试系统'
fetch next from my_cur into @s_name,@c_name,@sc_core
while @@fetch_status=0
begin
if @sc_core<60
begin
print space(20)+@s_name+ @c_name +':不及格 '
end
else
begin
if @sc_core >=60 and @sc_core <70
begin
print space(20)+@s_name+ @c_name +':及格 '
end
else
begin
if @sc_core>=70 and @sc_core<80
begin
print space(20)+@s_name + @c_name +':良好'
end
else
begin
print space(20)+@s_name + @c_name +':优秀'
end
end
end
fetch next from my_cur into @s_name,@c_name,@sc_core
end
close my_cur
deallocate my_cur

结果:
2007年计算机专业考试系统
Jack Dong C++ 程序设计:及格
Jack Dong 操作系统:良好
Lucy Dong C++ 程序设计:优秀
Lucy Dong 计算机组成原理:良好
Brezse Dong C++ 程序设计:优秀
Brezse Dong 面向对象的程序设计方法:不及格
Andy Liu 操作系统:不及格
Andy Liu 计算机组成原理:优秀

使用游标时应注意的问题:
 
(1) 尽管使用游标比较灵活,可以实现对数据集中单行数据的直接操作,但游标会在下面几个方面影响系统的性能:
-使用游标会导致页锁与表锁的增加
-导致网络通信量的增加
-增加了服务器处理相应指令的额外开销

(2) 使用游标时的优化问题:
-明确指出游标的用途:for read only或for update
-在for update后指定被修改的列

分享到:
评论

相关推荐

    python实现文件的备份流程详解

    第二步:新建好我们的Python文件后,我们在编辑界面输入以下代码: oldfilename=input(请输入要备份的文件名:) #输入需要备份的旧文件名 oldfile=open(oldfilename,'r') #打开旧文件 if oldfile: #如果文件存在,...

    MySQL 备份和恢复策略

    为了保证数据的一致性,需要在备份文件前,执行以下 SQL 语句: FLUSH TABLES WITH READ LOCK; 也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的...

    监控系统的数据备份.doc

    监控系统的数据备份 一.前言 组态软件的应用已经拓展到了社会各个领域...因此基础备份主要包括:计 算机的CMOS参数设置、硬盘主引导记录及分区表、操作系统及部分设备驱动程序。 软件的备份则包括:组态软件、组态数据

    windows下oracle11g数据泵自动备份脚本

    如下两行中的d-3代表保存3天以内的备份,你希望保存几天的就将3改成几就行: forfiles /p "D:\backup" /m *.log /d -3 /c "cmd /c echo deleting @file ... && del /f @path" forfiles /p "D:\backup" /m *.dmp /d -...

    数据库备份脚本mysql

    备份策略应该包括以下几个方面: 备份频率:决定备份的频率,例如每天、每周或每月备份一次。 备份类型:决定备份的类型,例如完全备份或增量备份。 备份存储位置:决定备份文件的存储位置,例如本地磁盘、网络...

    Unity 场景备份扩展

    要使用自动备份场景工具,按照以下步骤安装: 将工具的脚本添加到 Unity 项目中。 在 Unity 编辑器中,选择 "Tools" 菜单,然后选择 "自动备份场景" 以打开工具窗口。 在工具窗口中,你可以启用或禁用自动备份,...

    文件自动备份工具

     配置信息为以下内容时不执行备份:  1.Type = 0  2.Type = 1 and Hour = 0  3.Type = 2 and Day = 0  4.Type = 3 and Day = 0  5.Type = 4 and Day = 0  配置实例说明:  1.Type = 1 and Hour = 1 每隔一...

    IFIX备份工程

    分自动备份和手动备份,内有截图 手动备份:手动备份又可分为完全备份和自定义备份 ...自定义备份主要备份以下文件: 备份PDB和PIC文件夹。 备份SCU配置 备份驱动器配置(MBE和MB1) 备份数据库文件(CSV文件)

    liunx下日志备份及清理脚本

    日志备份采用以下两种方式: 1、备份日志后同时删除原日志文件并把备份日志进行压缩存储。 2、备份日志后原日志文件不删除只清空当前当前日志内容,释放空间并把备份日志进行压缩存储。 备份日志清理采用以下两种...

    系统及数据库备份.doc

    备份策略 1 OS系统文件和操作系统备份 以下是系统文件的备份策略: 以下是操作系统的备份策略: 2 数据库归档日志和控制文件备份 以下是归档日志和控制文件备份策略: 3 数据库数据文件备份 以下是数据文件备份策略...

    WordPress数据库备份插件

    “备份选项”里就是通过什么方式备份,有以下三种方式: 保存到服务器上 下载到本地电脑 发送备份到邮箱里 如下图(点击浏览全图): 定时备份,你可以根据自己的需要来设置,每小时、每天、每周都可以...

    数据库备份和还原的应用

    数据库备份和还原主要由备份还原数据库和备份还原数据表两部分组成。 业务流程 在使用本系统时,请按照以下流程进行操作: 1.在【备份还原数据库】模块中,包括备份数据库和还原数据库。 (1)勾选“备份数据库”...

    备份或还原计算机上的个人资料文件

    可以对以下内容进行备份和还原(支持rar格式备份): 我的文档 收藏夹 桌面 cookies 主题及壁纸 OEM信息 系统服务列表、 网络IP及DNS设置(支持多网卡) 宽带ADSL密码备份(非明文,保存密码不会被杀毒软件报毒) =====...

    自动备份MySQL数据库

    以下是对自动备份MySQL数据库的一般描述: 定时任务/脚本:自动备份MySQL数据库通常使用定时任务或脚本来实现。可以使用操作系统的定时任务工具(如cron)或编写脚本来定期执行备份操作。 备份类型:自动备份可以...

    数据定时备份工具 V1.0

    以下“需要备份的目录(文件)”都以“原目录(文件)”替代, “备份保存的目录(文件)”都以“新目录(文件)”替代。 第一次使用为将原目录全部备份至新目录; 以后每次备份是以原目录每个文件是否被修改做...

    企业IT数据备份及恢复策略

    确需操作时,应履行以下手续: 4.7.1.相关使用部门的书面申请、部门主要领导审批; 4.7.2.应用系统管理员在数据库管理员和工作人员的监督下进行操作; 4.7.3.登记相关数据库操作登记薄,详细记录操作原因、时间、...

    oracle数据库冷备份的方法

    冷备份通常要备份以下文件:所有数据文件所有控制文件所有联机重做日志初始化参数文件initsid.ora(可选)先执行以下SQL语句查看所有需要备份的文件: 代码如下: SVRMGR&gt; select * from v$datafile;SVRMGR&gt; select *...

    爱数-超易备 备份策略提示COM初始化失败:没有注册类.docx

    当爱数-超易备服务器,设置备份策略时,提示以下错示 可先使用使用手册的方法,如下: 当问题没解决时,请安装以下路径的补丁: IT软件安装 (\\top-fp2)(S):\其它software\爱数-超易备客户端\SQLServer2005_BC_64....

    Ghost 8.3 系统备份软件

    我们可以设定以下三种选择:仅 DHCP、仅 BOOTP、两者。如果我们的局域网中由其他的 DHCP 服务器提供动态 IP 地址分配,那么这里选“仅BOOTP”即可;如果需要这台服务器提供动态 IP 地址分配,则需要选“两者”。  ...

    邮件备份王 V1.0,通过邮件快速备份网站数据!

    3、附件大小跟邮箱的上限支持大小有关,建议在10M以下,否则可能超时; 4、如果发送过程中出现短暂的程序无响应,属于正常现象,一般如果网速较慢,或者邮件服务器不可用会发生这种情况; 5、邮件发送完毕后,会自动...

Global site tag (gtag.js) - Google Analytics