`

SQLSERVER存储过程用游标案例

阅读更多
USE [TEST_DB]
GO

/****** [PRT].[Move_Data_TO_TEST_TABLE_IM]Script Date: 03/07/2012 14:36:16 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

/*********************************************************************************
*把数据从表 DATA_SOURCE_TABLE 移动到表 TEST_TABLE
*DataServer: 110.110.110.110
*DataBase:   TEST_DB
*Name:       [Move_Data_TO_TEST_TABLE]
*Function:   
*Input:	     overTimeHour INT
*Output:	 
*Creator:    GREATWQS 2012-02-23
*Updated:    GREATWQS 2012-02-29  UPDATE NEW REQUIREMENT
**********************************************************************************/
CREATE PROCEDURE [PRT].[Move_Data_TO_TEST_TABLE] 
    -- 超时时间(小时)
    @overTimeHour INT
AS
BEGIN
	  -- SET NOCOUNT ON added to prevent extra result sets from
	  -- interfering with SELECT statements.
	  SET NOCOUNT ON;
    
	  DECLARE
	      -- 需要插入表TEST_TABLE,数据来源声明
        @ItemNumber_Insert       CHAR(20),
        @ItemName_Insert         CHAR(50),
        @ItemColor_Insert        CHAR(10),
        @ItemSize_Insert         CHAR(5),
        @ItemWhereMadeIn_Insert  CHAR(20),
        @CreateTime_Insert       DATETIME,
        @ChangeTime_Insert       DATETIME,
        
        -- ItemNumber Record num in table
        @totalNum_SelectDB       INT,
        @changeTime_SelectDB     DATETIME
	  
	  -- Set Default Value
	  SET @CreateTime_Insert      = getdate()	
	  
    -- 1. 声明游标
	  DECLARE CURSOR_GREATWQS CURSOR
	  FORWARD_ONLY  STATIC  
        FOR 
            SELECT ItemNo,
                   ItemName,
                   ItemColor,
                   ItemSize,
                   ItemMadeIn,
                   InDate 
            FROM  PRT.DATA_SOURCE_TABLE  WITH(NOLOCK)
            WHERE InDate > dateadd(HOUR, -@overTimeHour, getdate())
            -- 在这里进行时间的限定.

    
    -- 2. 打开游标
    OPEN CURSOR_GREATWQS
	    
    -- 3. 抓取游标中的数据
    FETCH NEXT  FROM  CURSOR_GREATWQS
    INTO  @ItemNumber_Insert,
          @ItemName_Insert,
          @ItemColor_Insert,
          @ItemSize_Insert,
          @ItemWhereMadeIn_Insert,
          @ChangeTime_Insert
    
    -- 4. 对游标中的每一个记录进行处理: 循环
    WHILE (@@FETCH_STATUS = 0)
    BEGIN  
         -- 查看此ItemNumber_Insert是否已经存在表中
         SELECT TOP 1 @totalNum_SelectDB = COUNT(*) 
         FROM PRT.TEST_TABLE WITH(NOLOCK)
         WHERE ItemNumber = @ItemNumber_Insert
         
         -- 如果表不存在此@ItemNumber_Insert, 则插入
         IF @totalNum_SelectDB = 0
         BEGIN
            INSERT INTO PRT.TEST_TABLE(
                   [ItemNumber],
                   [ItemName],
                   [ItemColor],
                   [ItemSize],
                   [MadeIn],
                   [createTime],
                   [changeTime],
                   [lastChangeTime],
                   [priority],
                   [itemType],
                   [active])
             VALUES ( 
                   @ItemNumber_Insert,
                   @ItemName_Insert,
                   @ItemColor_Insert,
                   @ItemSize_Insert,
                   @ItemWhereMadeIn_Insert,
                   @CreateTime_Insert,
                   @ChangeTime_Insert,
                   NULL,
                   0,
                   0,
                   1
                  )
         END
         -- 如果此ItemNumber存在于表中,如果时间小,则更新. 
         ELSE 
         BEGIN
              -- 查看此ItemNumber_Insert的记录
              SELECT TOP 1 @changeTime_SelectDB = changeTime
              FROM PRT.TEST_TABLE WITH(NOLOCK)
              WHERE ItemNumber = @ItemNumber_Insert
              
              -- If item has exists in table, and changeTime<=newItem.changeTime 
              -- fresh the changeTime = newItem.changeTime, set active=1;
              IF @changeTime_SelectDB < @ChangeTime_Insert  
              BEGIN
                   UPDATE PRT.TEST_TABLE
                   SET changeTime = @ChangeTime_Insert, 
                       active = 1
                   WHERE ItemNumber = @ItemNumber_Insert
              END
         END
                 
         FETCH NEXT  FROM  CURSOR_GREATWQS
         INTO  @ItemNumber_Insert,
               @ItemName_Insert,
               @ItemColor_Insert,
               @ItemSize_Insert,
               @ItemWhereMadeIn_Insert,
               @ChangeTime_Insert
    END
    
    -- 5. 关闭游标
    CLOSE CURSOR_GREATWQS
    
    -- 6. 删除游标
    DEALLOCATE CURSOR_GREATWQS
    
    -- 最后一步: 删除过期任务
    UPDATE PRT.TEST_TABLE
    SET    active=0
    WHERE  changeTime < dateadd(HOUR, -@overTimeHour, getdate())

END

 

2
0
分享到:
评论

相关推荐

    sqlserver中触发器+游标操作实现

    sqlserver中触发器+游标操作实现,需要的朋友可以参考下

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    4.3 通过存储过程配置SQL Server 4.3.1 使用SQL Server Management Studio查询 4.3.2 执行查询和改变设置 4.3.3 检查和设置配置参数 4.3.4 使用ALTER DATABASE改变设置 第Ⅱ部分 SQL Server 2008的系统管理 第5章 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    4.3 通过存储过程配置SQL Server 4.3.1 使用SQL Server Management Studio查询 4.3.2 执行查询和改变设置 4.3.3 检查和设置配置参数 4.3.4 使用ALTER DATABASE改变设置 第Ⅱ部分 SQL Server 2008的系统管理 第5章 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    4.3 通过存储过程配置SQL Server 4.3.1 使用SQL Server Management Studio查询 4.3.2 执行查询和改变设置 4.3.3 检查和设置配置参数 4.3.4 使用ALTER DATABASE改变设置 第Ⅱ部分 SQL Server 2008的系统管理 第5章 ...

    SQL SERVER 2000开发与管理应用实例

    本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,能够多角度地引导读者学习相关...

    SQL Server数据库管理与开发PPT

    第8~10章,讲解自定义函数、存储过程和触发器,游标及事务,数据库的安全性;第11、12章,给出[教学成绩管理系统(VB+ASP)]数据库应用系统的完整案例及其源代码;最后在附录中提供了三个具有特色的辅助教学软件:SQL...

    SQL Server 数据库应用系统

    第1章 数据库系统概述 第2章 安装和配置SQL Server 2005 第3章 Transact –SQL 语言 ...第11 章 存储过程 第12 章 触发器 第13 章 游标及事务 第14章 数据库的备份与恢复 第15 章 SQL Server 2005数据库开发技术

    《SQL Server数据库管理与开发》PPT

    第四部分,讲解自定义函数、存储过程和触发器,游标 及事务,数据库访问的安全性;第五部分,讲解数据库管理的备份恢复、导入导出与分离 附加,代理与复制;第六部分,给出了一套数据库应用系统的完整的案例及其源...

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

     4.3 通过存储过程配置SQL Server 88  4.3.1 使用SQL Server Management Studio查询 88  4.3.2 执行查询和改变设置 90  4.3.3 检查和设置配置参数 91  4.3.4 使用ALTER DATABASE改变设置 95  第Ⅱ部分 SQL ...

    SQL.Server.2008管理员必备指南.part1.rar(1/4)

     4.3 通过存储过程配置SQL Server 88  4.3.1 使用SQL Server Management Studio查询 88  4.3.2 执行查询和改变设置 90  4.3.3 检查和设置配置参数 91  4.3.4 使用ALTER DATABASE改变设置 95  第Ⅱ部分 SQL ...

    sqlserver2000基础(高手也有用)

    7.2.4 使用SQL Server的系统存储过程处理分页 216 7.3 特殊要求的分页处理 217 7.3.1 随机显示的分页处理 217 7.3.2 分类数据的分页处理 221 第 8 章 树形数据处理 223 8.1 单编号处理法 223 8.1.1 ...

    SQL Server数据库管理与开发8_12PPT

    第8~10章,讲解自定义函数、存储过程和触发器,游标及事务,数据库的安全性;第11、12章,给出[教学成绩管理系统(VB+ASP)]数据库应用系统的完整案例及其源代码;最后在附录中提供了三个具有特色的辅助教学软件:SQL...

    Sql语言学习全套-给力推荐

    SQLServer应用程序中的高级SQL注入.tx SQL_ppt sql语句.txt trancount.sql Trigger Test.sql trigger transaction.sql T_sql示例.sql UDF在层次型数据处理中的妙用.txt 《SQL 参考手册》中文版.chm 下线数...

    数据库设计和高级查询课程课件(SQL Server版)

    chapter2\教学部分\补充案例\用SQL创建数据库登录用户.doc chapter2\教学部分\补充案例\约束.sql chapter2\教学部分\附加题答案 chapter2\教学部分\附加题答案\建库.sql chapter2\教学部分\附加题答案\建表和约束....

    SQL.Server.2008管理员必备指南.part4.rar(4/4)

     4.3 通过存储过程配置SQL Server 88  4.3.1 使用SQL Server Management Studio查询 88  4.3.2 执行查询和改变设置 90  4.3.3 检查和设置配置参数 91  4.3.4 使用ALTER DATABASE改变设置 95  第Ⅱ部分 SQL ...

    mssql的各种操作过程

    关于mssql的各种基本操作,附有案例数据库,包裹视图 ,存储过程, 游标, 触发器等类型的全部操作

    SQL.Server.2008管理员必备指南.part3.rar(3/4)

     4.3 通过存储过程配置SQL Server 88  4.3.1 使用SQL Server Management Studio查询 88  4.3.2 执行查询和改变设置 90  4.3.3 检查和设置配置参数 91  4.3.4 使用ALTER DATABASE改变设置 95  第Ⅱ部分 SQL ...

    php网络开发完全手册

    13.3.5 SQL Server 207 13.4 SQL语言简介 207 13.5 常见的数据库设计问题 208 13.6 关系型数据库的设计原则 209 13.6.1 第一范式(1NF) 209 13.6.2 第二范式(2NF) 209 13.6.3 第三范式(3NF) 210 13.7 数据库...

    亮剑.NET深入体验与实战精要2

    5.4.1 SQL和存储过程级别的事务 227 5.4.2 ADO.NET级别的事务 229 5.4.3 ASP.NET页面级别的事务 230 5.4.4 企业级服务COM+事务 231 5.4.5 System.Transactions 事务处理 236 5.5 Oracle开发常见问题 240 5.5.1 ...

    亮剑.NET深入体验与实战精要3

    5.4.1 SQL和存储过程级别的事务 227 5.4.2 ADO.NET级别的事务 229 5.4.3 ASP.NET页面级别的事务 230 5.4.4 企业级服务COM+事务 231 5.4.5 System.Transactions 事务处理 236 5.5 Oracle开发常见问题 240 5.5.1 ...

Global site tag (gtag.js) - Google Analytics