游标的的使用有日常的开发和维护的过程不使用的并不多,但是碰到一些棘手的问题的时候,游标时常是个非常好的帮手,下面就说下游标的使用方法,方法自己以后查阅,和加深一些印象,下面以一个存储过程为例
 
 T-SQL中的游标定义在MSDN中如下:

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]
     [ FORWARD_ONLY | SCROLL ]
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
     [ TYPE_WARNING ]
     FOR select_statement
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]
 
ALTER PROCEDURE [dbo]. [XXXX]
    ) ---流程名
AS
    DECLARE @tempIncident INT
    )
    ) ---实例号
    )--- 单号
    DECLARE @taskCnt INT ---task为的数量
    DECLARE @flag INT
    DECLARE @bflag INT

    ----定义一个游标--
    ----定义游标和定义一个变量是差不多的,不过后面要指定一个的查询语句,
    DECLARE mycur CURSOR
    FOR
        ( SELECT     bic. BI_Code ,----这时两个的数据是要使用的数据
                    bic.BI_Incident
          FROM    xxxxx AS inc ,
                    bic AS bic
          WHERE     inc .PROCESSNAME = bic .BI_ProcessName
                    AND INCIDENT = bic.BI_Incident
                    AND PROCESSNAME = @ProcessName

                        )
        )
    OPEN mycur--打开这个游标

    FETCH NEXT FROM mycur INTO @tempCode, @tempIncident ---把值放到变量中
      --循环这个值
      --这是一个系统的取游标值的一个变量

        BEGIN
            SELECT  @taskCnt = COUNT(*)
            FROM    xxxxx
            WHERE   INCIDENT = @tempIncident
                    AND PROCESSNAME = @ProcessName

             ---有task=1 的数据则是可以自动处理的
                BEGIN

                        BEGIN
                            SET @incident = CAST(@tempIncident AS NVARCHAR)
                        END
                    ELSE
                        SET @incident = @incident + ','
                            + CAST (@tempIncident AS NVARCHAR )

                END

            ELSE
                BEGIN

                        SET @bicode = @tempCode
                    ELSE
                        SET @bicode = @bicode + ',' + @tempCode

                END
             ---这里的是把数据再次放到变量里面,以便循环的使用
            FETCH NEXT FROM mycur INTO @tempCode, @tempIncident
        END
    CLOSE mycur
    DEALLOCATE mycur
    IF @bicode IS NULL
        SET @bicode = 'NULL'
    IF @incident IS NULL
        SET @incident = 'NULL'
    ELSE
        UPDATE  xxxxx

        WHERE   PROCESSNAME = @ProcessName
                AND INCIDENT IN ( SELECT     value
                                  FROM      dbo .fn_Split( @incident, ',') )

SQL 函数的使用:

函数在SQL中的使用提高了SQL代码的重复利用,也方便我们更高效的去用SQL做更多的事:下面我就对标量的函数进行说明,其它的东西也基本上是大同小异.

、标量函数

Create function 函数名(参数)

Returns 返回值数据类型

[with {Encryption | Schemabinding }]

[as]

begin

SQL语句(必须有return 变量或值)

例如:

),  ) = ' ')
 ) COLLATE SQL_Latin1_General_CP1_CI_AS )

这样就是把一个函数的基本形式定义好了 如同在代码中写出 public string get(){}

后面的代码也就是日常的sql查询或者是一些的特殊的处理

),  ) = ' ')
  ) COLLATE SQL_Latin1_General_CP1_CI_AS )
 AS
 BEGIN
 DECLARE @idx smallint ,
   ),
  @bcontinue bit,
  @iStrike smallint,
  @iDelimlength tinyint

IF @sDelim = 'Space'
 BEGIN
 SET @sDelim = ' '
 END

SET @sText = LTrim(RTrim (@sText))
SET @iDelimlength = DATALENGTH(@sDelim )

 ) or (@sDelim = 'Empty'))
 BEGIN

  BEGIN
  --If you can find the delimiter in the text, retrieve the first element and
   --insert it with its index into the return table.

    BEGIN
    , )
     BEGIN
     INSERT @retArray (idx , value )
     VALUES (@idx , @value )
     END

    --Trim the element and its delimiter from the front of the string.
    --Increment the index and loop.
    SET @iStrike = DATALENGTH(@value ) + @iDelimlength

    SET @sText = LTrim(Right(@sText ,DATALENGTH( @sText) - @iStrike ))

    END
   ELSE
    BEGIN
    --If you can’t find the delimiter in the text, @sText is the last value in
    --@retArray.
      SET @value = @sText
     BEGIN
     INSERT @retArray (idx , value )
     VALUES (@idx , @value )
     END
    --Exit the WHILE loop.

    END
   END
  END
 ELSE
  BEGIN

   BEGIN
   --If the delimiter is an empty string, check for remaining text
   --instead of a delimiter. Insert the first character into the
   --retArray table. Trim the character from the front of the string.
   --Increment the index and loop.

    BEGIN
    , )
     BEGIN
     INSERT @retArray (idx , value )
     VALUES (@idx , @value )
     END

    , )

    END
   ELSE
    BEGIN
    --One character remains.
    --Insert the character, and exit the WHILE loop.
    INSERT @retArray (idx , value )
    VALUES (@idx , @sText )

    END
  END

 END

 RETURN
 END
 

第十四篇 SQL游标、函数的使用方法的更多相关文章

  1. 解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)

    解剖SQLSERVER 第十四篇    Vardecimals 存储格式揭秘(译) http://improve.dk/how-are-vardecimals-stored/ 在这篇文章,我将深入研究 ...

  2. 第十四篇 Integration Services:项目转换

    本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业 ...

  3. JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

    JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是clas ...

  4. 【译】第十四篇 Integration Services:项目转换

    本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业 ...

  5. Spring Cloud第十四篇 | Api网关Zuul

    ​ 本文是Spring Cloud专栏的第十四篇文章,了解前十三篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring C ...

  6. Python之路【第十四篇】:AngularJS --暂无内容-待更新

    Python之路[第十四篇]:AngularJS --暂无内容-待更新

  7. 跟我学SpringCloud | 第十四篇:Spring Cloud Gateway高级应用

    SpringCloud系列教程 | 第十四篇:Spring Cloud Gateway高级应用 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 ...

  8. SpringBoot第二十四篇:应用监控之Admin

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11457867.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   前一章(S ...

  9. Egret入门学习日记 --- 第十四篇(书中 5.4~5.6节 内容)

    第十四篇(书中 5.4~5.6节 内容) 书中内容: 总结 5.4节 内容重点: 1.如何编写自定义组件? 跟着做: 重点1:如何编写自定义组件? 文中提到了重要的两点. 好,我们来试试看. 第一步, ...

随机推荐

  1. 用while判读循环语句1+1/2!+1/3!+...1/20!的和阶乘的计算方法 式:n!=n*(n-1)!

    package com.chongrui.test; /* *用while判读循环语句1+1/2!+1/3!+...1/20!的和 *使用BigDecimal类完成大数字与高精度运算 公式:n!=n* ...

  2. AC日记——统计难题 hdu 1251

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  3. Discuz教程:X3.1-x3.2后台admin.php防止直接恶意访问

    功能说明:admin.php是discuz默认的后台地址,正常情况下可以直接访问,为了防止某些恶意访问的情况,可以修改以下内容进行安全性能提升.适用版本:Discuz!x1-x3.2具体实施方案: a ...

  4. Blend4 的安装和配置

    Microsoft Expression Blend作为一款功能齐全的专业设计工具,可用来针对基于 Microsoft Windows 和基于 Microsoft Silverlight 1.0 的应 ...

  5. 关于如何正确地在android项目中添加第三方jar包

    在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception.error inflati ...

  6. C# 程序集 和 反射

    .Net反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为.Net的反射机 ...

  7. VisualGDB Makefiles

    以下内容是VisualGDB官网对VisualGDB编译时获取相关编译信息的说明: When you create a new project using VisualGDB, it will gen ...

  8. ASP.NET Zero--14.一个例子(7)商品分类管理-分类搜索及分页

    分类搜索实现 1.添加搜索框 打开Index视图,添加一个搜索框,代码如下: ... <div class="portlet light"> <div class ...

  9. [nginx]Windows和Mac下,nginx反向代理服务器配置

    最近做项目,前端需要用到nginx反向代理来转发请求,总结了一下在Windows和Mac上的配置,以备查询. 一.Windows 修改nginx的配置文件,nginx.conf. 1)nginx.co ...

  10. 谈谈getElementsByClassName()

    HTML5中新增的一个方法getElementsByClassName(),但是并非所有浏览器有支持 因此我们构造一个方法兼容这个方法 <script type="text/javas ...