SQL Server游标的介绍与使用

游标概念

数据库操作中我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案。

游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。

每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理.游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。

游标总是与一条SQL 查询语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。

当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。

我们知道关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中。

因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

游标的使用一般是这样,个人理解:定义游标-->打开游标-->Fetch next from into --> where @@fech_status=0(这个类似C语言中的指针) -->Fetch next from into -->end -->关闭游标(close 游标名)-->Deallocate 游标

具体事例:

定义游标Test_Cursor,

declare @paraA nvarchar(50)--定义参数
declare @paraB nvarchar(50)--定义参数
declare @paraC nvarchar(50)--定义参数
declare Test_Cursor cursor local for--定义游标

打开游标 ,定义要游标的结果集

--相当于要遍历的表内容
select
 tableA_columnA,
 tableA_columnB,
 tableA_columnC
from tableA
--相当于将指针指向这个表头,指向该数据表集的第一条记录,
open Test_Cursor fetch next from Test_Cursor into
@paraA,
@paraB,
@paraC
while @@fetch_status=0

循环遍历数据集中的内容,一条条做

begin
insert into
 tableB(
 tableB_columnA,
 tableB_columnB,
 tableB_columnC)
values(
@paraA,
@paraB,
@paraC)
fetch next from Test_Cursor into
@paraA,
@paraB,
@paraC
end

关闭和收尾回收内存

close Test_Cursor
deallocate Test_Cursor

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Sql Server的一些知识点定义总结

    数据库完整性:是指数据库中数据在逻辑上的一致性.正确性.有效性和相容性 实体完整性(Entity Integrity 行完整性):实体完整性指表中行的完整性.主要用于保证操作的数据(记录)非空.唯一且不重复.即实体完整性要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为"空"(NULL)或重复. 域完整性(Domain Integrity 列完整性):是指数据库表中的列必须满足某种特定的数据类型或约束.其中约束又包括取值范围.精度等规定.表中的CHECK.FOREI

  • C#连接SQL Server的实现方法

    前言 对于专业的程序员来说,C#连接SqlServer进行新增.修改.查询哪简直就是小菜一碟,信手拈来 ,但对刚入门孩童们就不是哪么一回事了,有时一个代码出错就折腾好几天,所以下面这篇文章就来给大家介绍下C#连接SQL Server的相关内容. C# 用 Connection 连接数据库,一般在连接字符串里需要指定要连接数据源的种类.数据库服务器的名称.数据库名称.登陆用户名.密码.等待连接时间.安全验证设置等参数信息,这些参数之间用分号隔开.下面将详细描述这些常用参数的使用方法. 1. Pro

  • 详解易语言操作sql server实例

    最近看到很多初学者在问在易语言中如何操作SQL Server以外部数据库,也有人提出想要个全面的操作过程,为了让大家能够尽快上手,我给大家简单介绍一下操作SQL的过程,希望能起到抛砖引玉的作用. 由于我本身工作业比较忙,就以我目前做的一个软件的部份内容列给大家简单讲讲吧,高手就不要笑话了,只是针对初学者 第一步,首先需要建立一个数据库: 以建立一个员工表为例,各字段如下: 3 员工ID int 4 0 0 登陆帐号 nvarchar 30 1 0 密码 nvarchar 15 1 0 所属部门

  • SQL Server三种锁定模式的知识讲解

    sql server 锁定模式有三种:共享( S锁),更新(U锁),排他(X锁): S锁是共享锁,如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁.获准共享锁的事务只能读数据,不能修改数据. 个人理解为,对数据A的操作就只能是SELECT ,(联想下,S锁,不就是Select的首字母么),其他事务对A数据的UPDATE ,DELETE都不能进行: U锁是更新锁.用于可更新的资源中.防止当多个会话在读取.锁定以及随后可能进行的资源更新时发生常见形式的死锁. 原理解释: 更

  • SQL Server四个系统表的知识讲解

    SQL SERVER 中有四个系统表 master, model, msdb,tempdb.这四个表有什么用? 一般DB使用中我们开发人员很少去关注这四个表.但是这四个表个人感觉很重要,掌握一些基本的知识会对自己有好处,于是我记录下来. master 这个表保存了SQL server的系统信息,用于跟踪整个SQL系统: model 这个是个模板表.可以基于这个表来得到一个副本,怎么说呢,就是说要改变新建标准数据库的样式的话,可以根据需要改变model ,是新建DB的模板: msdb 是SQL 代

  • SQL Server 2008数据库分布式查询知识

    在接触公司一个系统时,公司使用的是SQL Server 2008数据库,里面涉及到了多个数据库之间的查询,而且数据库是分布式的,数据库分布在多台服务器之间,并且各个数据库各尽其责,负责存放不同模块功能的数据.这里面就要涉及到了数据库的分布式查询. 补充一下分布式查询的知识: 分布式查询从多异类数据源中访问数据.这些数据源可以存储在同一台计算机或不同的计算机上.Microsoft SQL Server 通过使用 OLE DB 来支持分布式查询. SQL Server 用户可以使用分布式查询访问以下

  • SQL Server视图的讲解

    在初期的工作中,要做一个系统登录验证,翻阅同事做的登录验证,发现同事们做用户名验证时,查的结果集来自一个视图,之前也弄过视图,但很少去仔细看过有关方面的详细知识,于是特意百度谷歌了一下,总结如下知识: 视图,是基于SQL语句的结果集的可视化表.从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据.从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表.从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一

  • laravel5使用freetds连接sql server的方法

    相关版本 系统ubuntu 16.04, 使用的PHP版本是7.0.30, sqlserver 2012, freetds为0.92 Laravel5.5和5.4都测试过了 什么是FreeTDS  简单的说FreeTDS是一个程序库,可以实现在Linux系统下访问微软的SQL数据库! FreeTDS 是一个开源的程序库,是TDS(表列数据流 )协议的再次实现.它可以被用在Sybase的db-lib或者ct-lib库.它也包含一个ODBC的库.允许许多开源的应用软件比如Perl和PHP(或者你自己

  • sqlserver2008首次登录失败问题及解决方法

    首次安装完sqlserver之后,使用(local)登陆失败情况分析: 失败的可能行有两个,在sqlserver管理器里面查看下图所标位置,并设置成如下配置 如上设置完成后,使用(local)连接还是失败,则继续检查: 右击,属性:检查IPADDRESS,找到IP3设置成如下参数 设置完成之后,急需找到IPALL设置成 重启Service 总结 以上所述是小编给大家介绍的sqlserver2008首次登录失败问题及解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.

  • SQL Server中的SELECT会阻塞SELECT吗

    前言 在SQL Server中,我们知道一个SELECT语句执行过程中只会申请一些意向共享锁(IS) 与共享锁(S), 例如我使用SQL Profile跟踪会话86执行SELECT * FROM dbo.TEST WHERE OBJECT_ID =1 这个查询语句,其申请.释放的锁资源的过程如下所示: 而且从最常见的锁模式的兼容性表,我们可以看到IS锁与S锁都是兼容的,也就是说SELECT查询是不会阻塞SELECT查询的. 现有的授权模式 请求的模式 IS S U IX SIX X 意向共享 (

随机推荐