zoukankan      html  css  js  c++  java
  • Sqlserver 游标

       说到游标,其实在实际开发中并不常用,他的特点就是行处理,当我们也好对每一行数据进行数据处理的时候,会用到游标,还有遇到一些对单行复杂的逻辑操作,或者用到临时表时用游标最好。

       游标的定义方式分五步:1,声明游标  2,打开游标    3,处理数据   4,关闭游标   5, 释放游标(删除游标)

    首先建一张表

    create table Student(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](50) NULL,
    [age] [varchar][50] NULL

    声明游标:

    declare StudentCur cursor --声明时未指定"local"或"global"关键字,系统默认游标是"global(全局)"的.
    for
    select name,age from Student
    GO
    打开游标:
    Open StudentCur
    while @@status=0
    处理数据:
    fetch next from StudentCur
    begin
    fetch next from studentCur --读取当前行的下一行,并使其置为当前行(刚开始时游标置于表头的前一行,即若表是从0开始的,游标最初置于-1处,所以第一次读取的是头一行)
    fetch prior from studentCur --读取当前行的前一行,并使其置为当前行
    fetch first from studentCur --读取游标的第一行,并使其置为当前行(不能用于只进游标)
    fetch last from studentCur --读取游标的最后一行,并使其置为当前行(不能用于只进游标)
    fetch absolute 2 from studentCur --读取从游标头开始向后的第2行,并将读取的行作为新的行
    fetch relative 3 from studentCur --读取从当前行开始向后的第3行,并将读取的行作为新的行
    fetch relative-2 from studentCur --读取当前行的上两行,并将读取的行作为新的行
    --读取数据结束

    end
    关闭游标:
    close StudentCur
    释放游标:
    deallocate StudentCur

    游标实例:

    先向为了有演示游标用法,向Student表中添加学生信息。

    insert into Student(name,age)values('张三‘,20) 

    insert into Student(name,age)values('李四‘,21) 

    实现功能:将表中成员的年龄有减1岁

    USE [JiZhan]
    GO
    /****** Object:  StoredProcedure [dbo].[GetSysDateTime]    Script Date: 2019/11/20 星期三 13:39:42 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:        <Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:    <Description,,>
    -- =============================================
    create PROCEDURE [dbo].[Demo]   
    AS
    declare @Reage int
    declare @Id int
    declare StudentCur cursor
    for 
    select Id, age from Student
    GO
    Open StudentCur
    while @@status=0
    fetch next from StudentCur into @Id,@age
    update Student set age=@age+1 where Id=@id
    begin
    fetch next from studentCur into @age,@age --读取当前行的下一行,并使其置为当前行(刚开始时游标置于表头的前一行,即若表是从0开始的,游标最初置于-1处,所以第一次读取的是头一行)
    update Student set age=@age+1 where Id=@id
    end
    close StudentCur
    deallocate StudentCur

    以上我只是做一个简单的实例,其实游标好好多属性,设置应用与不同场景。这就要具体情况具体对待了。

     但是我个人建议,能不用游标就不要用游标,太好资源和内存了。

      

       

  • 相关阅读:
    静态页转换平台(StaticPol)-静态页生成终极解决方案
    用DataSetSurrogate加速WebService
    压缩和解压缩数据流
    Stream 和 byte[] 之间的转换(转)
    优化网站性能 提高网站速度访问速度的14条实践(转)
    常用WebServices返回数据的4种方法比较
    .Net 中的序列化与反序列化
    对象序列化反序列化
    ASP.Net中自定义Http处理及应用之HttpModule篇
    利用UrlRewrite,asp.net动态生成htm页面
  • 原文地址:https://www.cnblogs.com/zpy1993-09/p/11898531.html
Copyright © 2011-2022 走看看