`

MS-SQL的游标

阅读更多
    与windows或DOS的“光标”不同,MS-SQL的游标是一种临时的数据库对象,既对可用来旋转储存在系统永久表中的数据行的副本,也可以指向储存在系统永久表中的数据行的指针。
    游标为您提供了在逐行的基础上而不是一次处理整个结果集为基础的操作表中数据的方法。

1.如何使用游标

   1)定义游标语句 Declare <游标名> Cursor  For
   2)创建游标语句 Open <游标名>
   3)提取游标列值、移动记录指针 Fetch  <列名列表>  From  <游标名>  [Into <变量列表>]
   4)使用@@Fetch_Status利用While循环处理游标中的行
   5)删除游标并释放语句 Close  <游标名>/Deallocate  <游标名>
   6)游标应用实例

   --定义游标
   Declare cur_Depart Cursor
     For  Select  cDeptID,cDeptName  From  Department  into  @DeptID,@DeptName
   --创建游标
   Open cur_Depart
   --移动或提取列值
   Fetch  From  cur_Depart  into  @DeptID,@DeptName
   --利用循环处理游标中的列值
   While  @@Fetch_Status=0
     Begin
       Print @DeptID,@DeptName
       Fetch  From  cur_Depart into  @DeptID,@DeptName
     End
   --关闭/释放游标
   Close  cur_Depart
   Deallocate  cur_Depart



2.语句的详细及注意

   1)定义游标语句

   Declare <游标名>  [Insensitive] [Scroll]  Cursor
     For  <Select 语句>  [FOR {Read Only | Update [ OF <列名列表>]}]

    Insensitive  DBMS创建查询结果集数据的临时副本(而不是使用直接引用数据库表中的真实数据行中的列)。游标是Read Only,也就是说不能修改其内容或底层表的内容;
    Scroll  指定游标支持通过使用任意Fetch 选项(First  Last  Prior  Next Relative  Absolute)选取它的任意行作为当前行。如果此项省略,则游标将只支持向下移动单行(即只支持游标的Fetch  Next);
    Select语句  定义游标结果集的标准 SELECT 语句。在游标声明的 <Select语句>内不允许使用关键字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO;
    Read Only  防止使用游标的用户通过更新数据或删除行改变游标的内容;
    Update  创建可更新游标且列出值能被更新的游标列。如果子句中列入了任意列,则只有被列入的列才能被更新。如果Declare  Cursor语句中只指定的UPDATE(没有列名列表),则游标将允许更新它的任何或所有列。
    Declare  cur_Depart  Cursor
        For  Select  *  From  Department  For  Update  OF  cDeptID,cDeptName
    2)提取游标列值、移动记录指针语句

     Fetch  [Next | Prior | First | Last | {Absolute <行号>} | {Relative <行号>}]
          From  <游标名>  [Into <变量列表……>]

    每次执行Fetch语句时,DBMS移到游标中的下一行并把游标中的列值获取到Into中列出的变量中。因此Fetch语句的Into子句中列出的变量必须与游标定义中Select 语句中的列表的类型与个数相对应;
    仅当定义游标时使用Scroll参数时,才能使用Fetch语句的行定位参数(First  Last  Prior  Next Relative  Absolute);如果Fetch语句中不包括参数Next | Prior | First | Last,DBMS将执行默认的Fetch Next;
    Next  向下、向后移动一行(记录);
    Prior  向上、向前移动一行(记录);
    First  移动至结果集的第一行(记录);
    Last  移动至结果集的最后一行(记录);
    Absolute  n  移动到结果集中的第n行。如果n是正值,DBMS从结果集的首部向后或向下移动至第n行;如果n是负数,则DBMS从结果集的底部向前或向上移动n行;
          Fetch  Absolute  2  From  cur_Depart  Into  @DeptID,@DeptName
    Relative  n   从指针的当前位置移动n行。如果n是正值,DBMS将行指针向后或向下移动至第n行;如果n是负数,则DBMS将行指针向前或向上移动n行;
          Fetch  Relative  2  From  cur_Depart  Into  @DeptID,@DeptName
    3)基于游标的定位DELETE/UPDATE语句

    如果游标是可更新的(也就是说,在定义游标语句中不包括Read Only 参数),就可以用游标从游标数据的源表中DELETE/UPDATE行,即DELETE/UPDATE基于游标指针的当前位置的操作;
    举例:

      --删除当前行的记录
     Declare cur_Depart Cursor
       For  Select  cDeptID,cDeptName  From  Department  into  @DeptID,@DeptName
     Open cur_Depart
     Fetch  From  cur_Depart  into  @DeptID,@DeptName
     Delete  From  Department  Where  CURRENT  OF  cur_Depart

    --更新当前行的内容
     Declare cur_Depart Cursor
       For  Select  cDeptID,cDeptName  From  Department  into  @DeptID,@DeptName
     Open cur_Depart
     Fetch  From  cur_Depart  into  @DeptID,@DeptName
     Update  Department  Set  cDeptID=’2007’ + @DeptID  Where  CURRENT  OF  cur_Depart



3.游标使用技巧及注意

   1)利用Order By改变游标中行的顺序。此处应该注意的是,只有在查询的中Select 子句中出现的列才能作为Order by子句列,这一点与普通的Select语句不同;
  2)当语句中使用了Order By子句后,将不能用游标来执行定位DELETE/UPDATE语句;如何解决这个问题,首先在原表上创建索引,在创建游标时指定使用此索引来实现;例如:

   Declare cur_Depart Cursor
     For  Select  cDeptID,cDeptName  From  Department  With  INDEX(idx_ID)
     For  Update  Of  cDeptID,cDeptName

    通过在From子句中增加With Index来实现利用索引对表的排序;


分享到:
评论

相关推荐

    MS-SQL jdbc 2.0

    **MS-SQL JDBC 2.0 知识点详解** MS-SQL JDBC 2.0 是微软提供的Java数据库连接(JDBC)驱动程序,专为与Microsoft SQL Server进行交互而设计。这个版本的驱动程序允许Java应用程序通过JDBC API与SQL Server 2000、...

    MS SQLSERVER游标和锁的课件

    游标有多种实现方式,包括T-SQL游标、API服务器游标和客户端游标。在T-SQL中创建游标通常使用`DECLARE`语句,例如: ```sql DECLARE @MyCursor CURSOR [LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL] [STATIC | KEYSET |...

    SQL游标原理和使用方法.doc

    ### SQL游标原理和使用方法 #### 一、引言 在数据库开发中,当我们需要检索数据时,通常会使用`SELECT`语句。但在某些情况下,我们需要从查询结果集中逐条读取记录,这时就需要用到游标。本文将详细介绍SQL游标的...

    MS SQL SERVER 游标详解

    在MS SQL SERVER中,游标是一项关键功能,它允许开发者逐行处理查询结果集,而不仅仅是一次性处理所有数据。游标对于那些需要按顺序访问或处理数据的应用场景尤其有用,例如在循环中处理数据记录或者根据当前行状态...

    MS.SQL.Server.2008.技术内幕:T-SQL.查询.rar

    《MS.SQL.Server.2008.技术内幕:T-SQL.查询》是关于Microsoft SQL Server 2008数据库管理系统中T-SQL查询语言的一本深入解析书籍。T-SQL(Transact-SQL)是SQL Server的标准查询语言,它是SQL的扩展,包含了SQL的...

    JDBC for MS-SQL2000

    **JDBC for MS-SQL2000** Java Database Connectivity(JDBC)是Java编程语言中用于连接数据库的标准API,它允许Java应用程序与各种类型的数据库进行交互。在本主题中,我们将深入探讨JDBC在与Microsoft SQL Server...

    MS-SQL报表生成的一种通用方法.pdf

    MS-SQL报表生成的通用方法主要涉及SQL查询语言的使用,以及存储过程、动态SQL语句和游标的应用。接下来,将详细阐释这些知识点。 首先,MS-SQL报表生成的起点是数据库中的基础表。在本例中,基础表Table1包含姓名、...

    MS-SQL数据库开发—精典简单应用

    ### MS-SQL数据库开发——经典简单应用 在本篇文章中,我们将探讨Microsoft SQL Server(简称MS-SQL)中的一些实用技巧与应用场景。这些技巧涵盖了数据排序、硬盘分区查看、数据加密等多个方面,对于数据库开发者来...

    MS-sql、Oracle、Mysql、Informix数据类型集锦

    在本文中,我们将深入探讨四个流行的数据库管理系统——MS-SQL、Oracle、MySQL和Informix各自支持的主要数据类型。 MS-SQL(Microsoft SQL Server)提供了多种数据类型,以满足各种数据存储需求: 1. **bit**:...

    SQL游标简介(详细)

    SQL游标是数据库开发中的一种重要工具,尤其在处理逐条数据操作的场景下显得尤为重要。游标允许程序员按照特定顺序访问查询结果集,并对每一行数据进行独立的操作,如读取、修改、删除等。这与传统的面向集合的...

    MS - Microsoft SQL Server 2008 T-SQL Fundamentals (2008.10).

    《Microsoft SQL Server 2008 T-SQL Fundamentals》是针对SQL Server 2008数据库管理系统中T-SQL(Transact-SQL)基础的一份详细教程。T-SQL是SQL Server的主要查询语言,用于数据操作、查询、存储过程编写、事务...

    14计科接本MS-SQLServer数据库技术实验教案.doc

    【MS-SQLServer数据库技术实验教案】是针对邢台学院14级计算机科学与技术专业接本学生设计的一门实验课程,旨在通过实践操作加强学生对大型数据库管理系统SQL Server 2005的理解和应用能力。这门课程共32学时,1学分...

    游标 ms sql 例子

    游标 ms sql 例子----- 大概模式 临时表使用等-——---

    MS-SQL:在这里,我将添加本课程所有练习的解决方案!

    在本课程中,我们主要关注的是Microsoft SQL Server(简称MS-SQL)的使用,特别是针对TSQL(Transact-SQL)的学习与实践。TSQL是SQL的一个扩展,由微软开发,广泛应用于MS-SQL数据库的管理和操作。在这个压缩包文件...

    MS SQL Server2005存储过程、游标、游标嵌套综合例子

    本篇将深入探讨SQL Server 2005中的存储过程、游标以及游标嵌套的综合应用。 存储过程(Stored Procedure)是预编译的SQL语句集合,它们封装了特定的功能,可以多次调用,提高了代码的复用性和执行效率。在SQL ...

    MS SQL Server游标(CURSOR)的学习使用

    在MS SQL Server中,游标允许我们遍历查询结果集,一次处理一行数据,而不是一次性处理所有数据。下面我们将详细讲解游标的概念、类型、使用方法以及优缺点。 1. 游标概念: 游标(Cursor)是一个数据库对象,它...

    游标嵌套 STATUS 异常 存储过程

    ```sql WHILE @@FETCH_STATUS = 0 BEGIN -- 处理逻辑 -- ... -- 在每次进入内层循环前重新打开内层游标 CLOSE CUR; OPEN CUR; -- 或者在每次执行完内层循环后关闭内层游标 -- CLOSE CUR; END ``` 通过这样的...

    SQL语句转换(delphi与MS SQL语句进行转换)

    6. **游标和循环**:在Delphi中,可能使用For-Loop遍历结果集,而在T-SQL中则使用DECLARE CURSOR和FETCH语句。转换工具需考虑这些差异。 7. **错误处理**:Delphi的Try...Except...Finally与T-SQL的TRY...CATCH块...

    php采用ms官方扩展pdo方式连接高版本mssql需要sqlncli

    它支持SQL Server特有的功能,例如游标、XML数据类型和针对大型对象的流式处理。 在实际应用中,要使用PDO连接SQL Server,你需要完成以下步骤: 1. 安装sqlncli:通常,这可以通过下载并运行sqlncli.msi文件完成...

Global site tag (gtag.js) - Google Analytics