zoukankan      html  css  js  c++  java
  • 游标那点事儿

    两种循环跳出方法

    1:稍显复杂点:

    CREATE  PROCEDURE dbo.usp_crAllTables

    @Client_ID VARCHAR(256)
    AS
    DECLARE @table_name VARCHAR(50)
    SET NOCOUNT ON 
    DECLARE T_Name_Cur CURSOR LOCAL STATIC FORWARD_ONLY FOR 
    SELECT name FROM 
    (VALUES ('Jim'),('Tom'),('Anna')) AS a (name)
    OPEN T_Name_Cur 
    WHILE 1=1
    BEGIN 
    FETCH NEXT FROM T_Name_Cur INTO @table_name
    IF @@FETCH_STATUS<>0 BREAK
    PRINT @table_name
    END 
    CLOSE T_Name_Cur

    DEALLOCATE T_Name_Cur


    重点在于break放置位置,避免重复取最后一行,这两种方法的print那里就是我们想要循环执行东东的地方。


    2.直接用@@fetch_status 作为循环终止条件

    SET NOCOUNT ON
    DECLARE T_Name_Cur CURSOR LOCAL STATIC FORWARD_ONLY FOR
    SELECT name FROM
    (VALUES ('Jim'),('Tom'),('Anna')) AS a (name)
    OPEN T_Name_Cur
    FETCH NEXT FROM T_Name_Cur INTO @table_name
    WHILE (@@fetch_status=0)
    BEGIN
    PRINT @table_name
    FETCH NEXT FROM T_Name_Cur INTO @table_name
    END
    CLOSE T_Name_Cur
    DEALLOCATE T_Name_Cur
    需要记得想要在循环内执行的东西要放到两个fetch next之间才好。


    实践,游标加上动态SQL 实现对某表的所有字段进行更新的操作

    CREATE PROCEDURE Clean_up_raw_tables 
    @Table_Name VARCHAR(256) 
    as 
    DECLARE @NAME VARCHAR(256), 
    @SQL VARCHAR(MAX) 
    DECLARE RE_CUR CURSOR LOCAL STATIC FORWARD_ONLY FOR 
    SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID(@Table_Name) AND NAME!='ID' 

    OPEN RE_CUR 
    WHILE (1=1) 
    BEGIN 
    FETCH NEXT FROM RE_CUR INTO @NAME 
    IF @@FETCH_STATUS<>0 BREAK 
    SET @SQL='UPDATE '+@Table_Name+' SET '+@NAME+'=REPLACE('+@NAME+',''"'','''')' 
    PRINT @SQL 
    EXEC(@SQL) 
    END 
    CLOSE RE_CUR 
    DEALLOCATE RE_CUR


    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    JavaScript备忘录-逻辑运算符
    CMake 构建项目教程-简介
    C++ 跨语言调用 Java
    Thrift-0.10.0 CenOS 7 编译错误 error: expected ')' before 'PRIu32'
    CentOS 7 安装 MySQL Database
    CentOS 安装 Wine
    FreeBSD 配置
    CentOS 6.5 升级 GCC 4.9.3
    Favorite Setting
    shell编程-1到100的求和与冒泡排序
  • 原文地址:https://www.cnblogs.com/Frank99/p/5400014.html
Copyright © 2011-2022 走看看