SQL Server基础操作(此随笔仅作为本人学习进度记录九!--游标)

游标就是存储结果集,将从指定表中查询出符合条件的记录,组成了结果集,然后把它存到游标当中,如果要显示游标中的哪一条记录
                         游标(游动的标识)  !!!!非常重要的知识点,比较难理解

!!!游标提供了对表中的数据检索的一种方式,一种灵活操作手段,只是检索表中数据的一种方式。
   在操作的时候也可以把游标看做是一个数据库对象。就好像视图一样。
   它也是依赖于T-sql语句来进行查询,把查询出来符合条件的记录,不是一下全部显示出来,可以一条记录一条记录的把它显示出来。
  它每次只提取一条记录,每次只显示一条记录。

游标的分类: 1、静态游标(不检测数据行的变化)
             2、动态游标(反映所有数据行的改变)
             3、仅向前游标(不支持滚动)
             4、键集游标(能反映修改,但不能准确反映插入、删除)

 游标的优点:一、它允许定位在结果集的特定行,查询出一组普通的记录可以把游标定位在某一条  录上,因为它是一个指针。
             二、从结果集的当前位置检索一行或多行。
             三、是对结果集当前位置的行进行数据修改。
             四、为由其它用户对显示在结果集中的数据库数据所做的更改提供互级别的可见性支持
             五、提供脚本存储过程触发器中使用的用于访问结果集中数据的T-SQL语句

                        1. 创建游标

use LtsDatabase实验   \\首先打开数据库
                                                      (游标/指针)
declare testCutsorA cursor for  \\创建游标testCutsorA,cursor for代表是一个游标,for是要存储到游标中的结果集。就是查询到符合条件的记录,
                   放在一起组成一个记录集,然后把它存储到游标testCutsorA (游标类似于一个变量) 里,用的时候可以从变量里一次提取一条记录。
select * from 网站职员表  \\从网站职员表中查找出符合条件的记录,然后把它存储到游标里。

for read only \\只读游标(标准游标的一种方式,去掉它,就成了一个标准游标)
for update \\更新游标

declare testCutsorA cursor for select * from 网站职员表 \\for后面是此游标使用的哪一个T-sql语句查询出来的结果集存储进testCutsorA来。

                     2.打开游标
                  open testCutsorA

                     3.使用游标
             fetch next from testCutsorA  \\滚动的从testCutsorA游标中一条一条的记录往下查找。

                   游标定义格式
                           (指针的意思)
Declare 游标名 [Insensitive] Cursor             !!!! 所有没有用中括号括起来的内容都是必填内容。
  局部  全局                                                 中括号括起来的内容就是可选内容。
[Local|Global]定义作用范围的,定义作用域的。
  只进游标  来回跳转的游标
[Forward_only|Scroll]

[Static|Keyset|Dynamic|Fast_forward]静态游标、键集驱动游标

[Read Only|Scroll_Locks|Optimistic]

[Type_warning]

For SQL 语句

[For[Read Only|Update]] \\定义只读游标和更新游标,如果其中任何一个都不用的话,
                          它就是一个标准的游标。

定义游标的三种形式:标准游标、只读游标、更新游标。

      标准游标
    1.创建游标
  use LtsDatabase试验
  declare testCursorB cursor sorcll for
  select * from 网站职员表

    2.打开游标
 open testCursorB

    3.使用游标
 fetch next from testCursorB \\滚动的从testCutsorA游标中一条一条的记录往下查找。

 fetch first from testCursorB \\跳转回第一条记录。

 fetch first last testCursorB \\跳转到最后一条记录

                   1.创建游标

                    (指针)(来回跳转的游标)
declare testCursorB cursor scroll for select * from 网站职员表 \\定义一个标准游标,从网站职员表中查询记录组成结果集。

                   2.打开游标

                   open testCursorB

                   3.使用游标

fetch Absolute 3 from testCursorB   \\查询出第三条记录。

 使用全局变量来检查,所查询的结果是否超出结果集所存储的记录... ...

 第一步: print @@fetch_status

 第二步:fetch Absolute 30 from testCursorB \\查询不到结果,因为已超出结果集所存储的记录。

 第三步:print @@fetch_status    结果为-1 \\结果为-1则是所查询的记录已超出结果集所存储的记录。
                                 结果为-2 \\结果为-2则是所查询的记录根本不存在。

                      游标指针的相对定位

               1.创建游标

   use LtsDatabase试验
   declare testCursorA cursor scroll for select * from 网站职员表

               2.打开游标
        open testCursorA

               3.读取
                     ( 绝对定位 )
          绝对的
   fetch absolute 6 from testCursorA  \\从testCursorA游标中绝对定位到第6条记录。

                    ( 相对定位 )
         相对的
   fetch relative -2 from testCursorA \\从testCursorA游标中的当前记录向前跳转两条记录

   fetch relative 2 from testCursorA \\从testCursorA游标中的当前记录向后跳转两条记录

             把提取出来的记录存储到指定的变量当中

 declare @testVar1 int,@testVar2 varchar(50),@testVar3 int,@testVar4 varchar(100),@testVar5 varchar (50),@testVar5 money \\连续声明5个变量,声明这5个变量的顺序是与网站职员表的字段类型顺序相同的。

 fetch absolute 2 from testCursorA into @testVar1,@testVar2,@testVar3,@testVar4,@testVar5,@testVar6   \\如果跳转到结果集中的第二条记录,则把它提取出来把各个字段的值分别存储赋给这5个变量。

 print ‘第一个字段的值为‘+cast(@testvar1 as varchar(50))                                    \\分别把一条记录中各个字段的值显示出来

 print ‘第一个字段的值为‘+@testvar2                                            \\分别把一条记录中各个字段的值显示出来

 print ‘第一个字段的值为‘+cast(@testvar3 as varchar(50))                            \\分别把一条记录中各个字段的值显示出来

 print ‘第一个字段的值为‘+@testvar4                                             \\分别把一条记录中各个字段的值显示出来

 print ‘第一个字段的值为‘+cast(@testvar5 as varchar(50))               \\分别把一条记录中各个字段的值显示出来

                                 也可以使用以下方式输出             

select @testVar1 as 职员编号为,@testVar2 as 姓名,@testVar3 as 年龄,@testVar4 as 毕业院校,@testVar5 as 工资

                                如何关闭和释放游标

               1.首先创建游标
  use newlts

  declare testCursorA cursor scroll for

  select * from 网站职员表

              2.打开游标

    open testCursorA 

              3.读取游标中的记录                  4.关闭游标               5.释放游标

    fetch next from testCursorA               close testCursorA    deallocate testCursorA    \\释放游标之后游标就不存在了。

原文地址:https://www.cnblogs.com/LNCC-ZhangXiang/p/11077425.html

时间: 2024-11-01 00:20:06

SQL Server基础操作(此随笔仅作为本人学习进度记录九!--游标)的相关文章

SQL Server基础操作(此随笔仅作为本人学习进度记录六 !--程序块和循环)

declare @test_Var int \\声明变量用declare,声明局部变量用@符号,变量的数据类型为整型int. (声明) set @test_Var=1000 \\为此变量赋值,赋值为1000. select @test_Var \\用select 语句进行显示此变量的值. 变量的声明以及赋值显示 局部变量:就是用户自定义的变量,作用范围仅在程序内部,在程序执行过程中暂存的变量的值,也可以存储从表或视图中查询出来的结果.局部变量在命名过程中必须以@开头 全局变量: 声明变量:声明变

SQL Server基础操作(此随笔仅作为本人学习进度记录五 !--数据类型)

二进制数据类型 binary varbinary Uniqueidentifier binarry(n):n用来表示数据的长度,长度为 1—8000,最低长度为1. varbinary:varbinary(n)!--具有可变动的长度类,型用来存储二进制数据的,.也是用来代表数据的长度,在输入数据的时候,必须在数据的前面加上Ox,作为数据的二进制标识若数据的长度过长, 那么系统会自动截去过长的部分若输入的数据的位数为奇数,则系统会在起始符号Ox后面加个0. Uniqueidentifier:也是二

SQL Server基础操作(此随笔仅作为本人学习进度记录)

create database LtsDatabase \\创建数据库 on ( name=LtsDatabase_data,\\数据库名称 filename='d:\temp\LtsDatabase_data.mbf',\\文件所在位置,扩展名.mdf size=6, \\数据库文件初始化大小 maxsize=12, \\数据库文件最大值可以为多大 filegrowth=10% \\数据库超过现有的尺寸后,数据库增长率 ) log on \\对事物日志的描述 ( name=LtsDatabas

SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)

存储过程 存储过程分为系统存储过程和自定义存储过程 存储过程通过将处理数据的程序从客户端应用程序移动到服务器,存储过程是放在服务器上的,通过客户端下达指令调用存储过程的时候, 这个过程是在服务器上发生的,自然就不会占用网络的带宽就会降低网络流量.存储过程就是一组为了完成特定功能的T-SQL语句.就是一组语句随时随地拿出来调用. 经过编译后,它存储在SQLserver服务器端的数据库中,换句话说这个T-SQL语句不是普通的T-SQL语句,是经过编译的,存储在服务器中,它是有名称的,根据名称调用存储

SQL Server基础操作(此随笔仅作为本人学习进度记录十 !--触发器)

触发器(同游标一样比较难理解,特殊的存储过程) 触发器是一种存储过程,只不过是一种特殊类型的存储过程,它的特殊性就在于根据某种特殊的情况下触发的, 存储过程的执行需要手动调用,而触发器作为一个存储过程它的执行,不是我们调用的,而是我们进行某些操作之后来触发它的, 它的原理相似于其它语言的事件句柄, 可以调用存储过程 它的主要作用就是用于实现由主键或外部键所不能保证的,复杂的参照完整性或数据一致性. 触发器还有以下几个功能: 1.可响应数据库的更新,触发器的操作可以通过调用一个或多个存储过程甚至可

SQL Server基础操作(此随笔仅作为本人学习进度记录三)

统计函数 select * from 教师资料 where 教师薪资>(select AVG(教师薪资) from 教师资料) \\从教师资料表中查出所有高于平均薪资的人员. use LtsDatabase alter table 网站职员表 \\修改此表 add 奖金 money \\增加奖金字段 更新奖金字段 use LtsDatabase update 网站职员表 set 奖金=500 \\更新网站职员表所有奖金更新至500元 计算每个员工的总收入是多少 use LtsDatabase s

SQL server基础知识(表操作、数据约束、多表链接查询)

SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database 数据库名称 查询:select name from master..sysdatabases 修改:alter database 数据库名称(在 sql server 中修改与数据库关联的文件和文件组.在数据库中添加或删除文件和文件组.更改数据库或其文件和文件组的属性) (3).管理表 选择数据库:use 数

SQL Server基础

一.常用命令 1.使用命令行开启SQL Server服务 获取管理员权限的命令行工具: net start mssqlserver 开启sql server服务 net restart mssqlserver 重新启动sql server服务 net stop mssqlserver 关闭sql server服务 2.使用命令登陆(该方法可适用于在一台没有SQL Server的电脑去操作一台有SQL Server的电脑) 运行: sqpl ?/ [-S 服务器的名称]  [-U 登陆名] [-P

SQL Server基础之<游标>

查询语句可能返回多条记录,如果数据量非常大,需要使用游标来逐条读取查询结果集中的记录.应用程序可以根据需要滚动或浏览其中的数据.本篇介绍游标的概念.分类.以及基本操作等内容. 一:认识游标   游标是SQL Server的一种数据访问机制,它允许用户访问单独的数据行.用户可以对每一行进行单独的处理,从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成的SQL代码并立即执行或输出. 1.游标的概念  游标是一种处理数据的方法,主要用于存储过程,触发器和 T_SQL脚本中,它们使结果集的内容