`

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
分享到:
评论

相关推荐

    如何编写SQL Server存储过程的详尽学习资料

    总之,学习SQL Server存储过程涉及到T-SQL语法、游标操作、事务管理和XML处理等多个方面。通过阅读电子书,参考案例代码,不断实践和优化,你将能够掌握这一强大的数据库工具,提升你的数据库开发和管理技能。

    SQL SERVER数据库开发之存储过程应用.rar

    总而言之,"SQL SERVER数据库开发之存储过程应用"教程会涵盖以上这些核心概念,并可能深入到高级主题,如动态SQL、游标、异常处理、临时表和变量的使用等。通过学习和实践,开发者可以提升在SQL Server环境下的...

    SQLserver存储过程语法及实例

    通过上述内容可以看出,SQL Server存储过程的知识点涵盖范围很广,包括创建与调用存储过程、参数的使用、流程控制、字符串和数学函数的使用、数据类型和比较操作等。掌握这些知识点,对于编写高效且稳定的SQL Server...

    SQLSERVER存储过程大总结.doc

    SQL Server 存储过程是数据库管理系统中的一种重要功能...总之,SQL Server的存储过程是数据库开发中的重要工具,它们允许开发者创建可重复使用的、灵活的、高效的数据处理逻辑,有助于提升系统的整体性能和可维护性。

    sql server 2000 案例精编

    最后,SQL Server 2000还支持一些高级特性,如存储过程、触发器、游标、事务日志分析和数据库性能监控。这些工具和功能在解决复杂业务逻辑、自动化操作和性能调优方面起着重要作用。书中将通过案例分析,使读者理解...

    游标嵌套 STATUS 异常 存储过程

    本示例提供了一个关于存储过程、异常处理、错误消息返回、游标嵌套及其相关问题解决的综合案例。通过这些知识点的学习,初学者可以更好地理解和掌握如何编写健壮、高效的数据库应用程序。同时,对于更高级的应用场景...

    VB链接sql使用游标和存储

    在VB(Visual Basic)编程中,连接SQL数据库并利用...总结,VB通过ADO连接SQL数据库,使用游标可以高效处理结果集,而存储过程则能提升性能和安全性。理解并熟练运用这些技术,对于任何VB开发者来说都是至关重要的。

    数据库源码(游标,存储过程)大全

    总的来说,"数据库源码(游标,存储过程)大全"是一个宝贵的教育资源,它将理论与实践相结合,对于想要深入了解和掌握数据库操作,尤其是微软SQL Server环境下的存储过程和游标运用的开发者来说,是一份不可或缺的...

    SQLSERVER2005中文版教程与案例解析

    《SQLSERVER2005中文版教程与案例解析》是一本深入浅出的数据库管理教程,专注于Microsoft SQL Server 2005这一重要的关系型数据库管理系统。这本书旨在帮助读者掌握SQL Server 2005的核心功能,提升在数据库设计、...

    sqlserver各章节教学案例

    "sqlserver各章节教学案例"提供了一系列完整的实例,旨在帮助初学者深入理解SQL语言并掌握其在SQL Server中的应用。这些案例覆盖了SQL的基础到高级概念,使学习过程更为直观和有趣。下面我们将详细探讨这些章节可能...

    SQL Server 2000存储过程手册

    掌握存储过程是任何SQL Server 2000数据库管理员和开发者的必备技能,这本书籍将提供深入的指导和实践案例,帮助读者充分利用这一强大工具。通过深入学习和实践,可以提升数据库设计和管理的专业水平,提高数据库...

    SQL Server 2000案例教程代码

    7. **其他功能**:SQL Server 2000还支持视图、游标、事务、备份恢复等高级特性,这些也可能在案例中有所体现,帮助你全面掌握数据库管理。 通过深入研究这些案例代码,不仅可以加深对SQL Server 2000的理解,还能...

    《SQL Server 2005实用教程》实验答案例题源码习题答案

    本教程通过实例、案例和习题解答,旨在帮助学习者全面理解和掌握SQL Server 2005的核心概念和技术。 **1. SQL Server 2005基础** SQL Server 2005的核心包括Transact-SQL(T-SQL)语言、数据库引擎、SQL Server ...

    SQL Server数据库实用案例教程

    最后,我们还将探索SQL Server的高级特性,如触发器、存储过程、游标和函数,以及大数据解决方案如Integration Services(SSIS)、Analysis Services(SSAS)和Reporting Services(SSRS)。这些工具能帮助企业实现...

    SQL存储过程(含ASP案例)

    在SQL Server、MySQL、Oracle等主流数据库系统中,都支持存储过程的创建和使用。存储过程可以接受输入参数,也可以返回结果集,甚至可以有输出参数,这使得它能灵活地处理各种数据交互需求。通过存储过程,开发者...

    SQL Server 2000 完结篇 性能调优与维护系列视频教程

    - **执行效率对比**:通过对存储过程和游标的性能测试结果进行分析,明确了各自的使用场景。 - **优化建议**:提出了改进存储过程和游标执行效率的方法,如减少网络往返次数、减少不必要的计算等。 #### 9. 专业的...

    SQL Server 2012案例教程.rar

    在本教程中,我们将深入探讨Microsoft SQL Server 2012这一强大且广泛使用的数据库管理系统。SQL Server 2012提供了许多改进的功能和优化,旨在提升数据存储、查询、分析以及安全性能,使得它在企业级应用中扮演着至...

    SQL语言参考大全、SQL Server精华

    本资源“SQL语言参考大全、SQL Server精华”涵盖了SQL的诸多关键知识点,包括但不限于基础查询、触发器、游标和存储过程,是深入理解和掌握SQL技术的重要资料。 1. SQL基础查询:SQL(Structured Query Language)...

    SQL Server 2005数据库案例教程

    《SQL Server 2005数据库案例教程》是由知名教师严波编著的一份电子教案,专注于教授SQL Server 2005这一重要的关系型数据库管理系统。本教程以丰富的实例和实践操作为教学手段,旨在帮助学习者深入理解和掌握SQL ...

Global site tag (gtag.js) - Google Analytics