`
raymond.chen
  • 浏览: 1437116 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Sqlserver存储过程及游标的使用

Go 
阅读更多
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

drop PROCEDURE remove_repeated_msisdn
go

-- =============================================
-- 处理重复号
-- =============================================
CREATE PROCEDURE [dcms_zhq].remove_repeated_msisdn
AS
BEGIN
	declare @num varchar(30)   
    declare @count bigint  
	
	declare @id bigint
	declare @big_box varchar(30)
	declare @little_box varchar(30)
	declare @zha varchar(30)
	declare @status bigint

	declare c1 cursor local for  
		select msisdn_,count(id_) amount_ from dcms_zhq.SIM_CARD_RESOURCE_
		where is_locked_='N' and unit_type_id_=400 and msisdn_='15119880662'
		group by msisdn_
		having count(id_)>1

	open c1   
    fetch next from c1 into @num,@count
    while (@@fetch_status=0)   
    begin
		--#####################
        declare c2 cursor local for
		select id_,big_box_id_,little_box_id_,zha_id_,status_
		from dcms_zhq.SIM_CARD_RESOURCE_ where msisdn_=@num order by input_date_time_ asc
		
		declare @count2 bigint
		set @count2 = 0
		
		open c2
		fetch next from c2 into @id,@big_box,@little_box,@zha,@status
		while (@@fetch_status=0)
		begin
			set @count2 = @count2 + 1
			if @count2<@count
			begin
				BEGIN TRANSACTION
				update dcms_zhq.SIM_CARD_RESOURCE_ set
					packer_=packer_+'_20100420_'+ltrim(rtrim(str(@count2))),
					msisdn_=msisdn_+'_20100420_'+ltrim(rtrim(str(@count2))),
					life_status_=102
				where id_=@id
				
				if @status=2 or @status=16
				begin
					if(len(@zha)>0) update dcms_zhq.SIM_CARD_RESOURCE_ set amount_=amount_-1 where packer_=@zha
					if(len(@little_box)>0) update dcms_zhq.SIM_CARD_RESOURCE_ set amount_=amount_-1 where packer_=@little_box
					if(len(@big_box)>0) update dcms_zhq.SIM_CARD_RESOURCE_ set amount_=amount_-1 where packer_=@big_box
				end
				
				IF @@ERROR>0
					ROLLBACK TRANSACTION
				else
					COMMIT TRANSACTION
			end
			
			fetch next from c2 into @id,@big_box,@little_box,@zha,@status
		end  
		close c2   
		deallocate c2 

		--#####################     
        fetch next from c1 into @num,@count
    end  
    close c1   
    deallocate c1   

END
GO

 

分享到:
评论

相关推荐

    SqlServer存储过程、游标讲解

    在SqlServer中,使用游标一般包含以下几个步骤:声明游标、打开游标、读取数据、关闭游标以及删除游标。声明游标时可以使用简单的查询,也可以是复杂的连接查询或者嵌套查询。游标被声明后,必须先打开才能从中读取...

    SqlServer存储过程游标

    ### SqlServer 存储过程与游标应用实例详解 #### 一、存储过程概述 在SQL Server中,存储过程是一种预编译的SQL语句集合,它可以被当作一个单独的对象来调用。存储过程可以提高应用程序性能,简化复杂的业务逻辑,...

    SQL SERVER中的存储过程和游标的使用大综合

    在"存储过程和游标创建使用大综合"的压缩包文件中,你可以找到更多关于这两个主题的实际例子和练习,帮助你深入理解和掌握SQL Server中存储过程和游标的使用方法。不断学习和实践这些知识,将有助于提升你在数据库...

    sqlserver游标存储过程的使用

    接下来,我们将学习如何在SQL Server存储过程中使用游标: 1. **声明游标**:首先需要声明一个游标,指定其类型、源数据集(通常是查询语句)以及其属性。例如: ```sql DECLARE @MyCursor CURSOR FOR SELECT * FROM...

    MS SQL Server2005存储过程、游标、游标嵌套综合例子

    在提供的示例文件`sqlserver2005_procedure_cursor_sample_20101015.sql`中,很可能是包含了存储过程的定义,这些存储过程可能涉及到游标的使用,甚至游标嵌套,以解决特定的业务问题。通常,这样的示例会展示如何在...

    SqlServer存储过程及调试指南

    SqlServer存储过程及调试指南的知识点如下: 1. 存储过程概念:存储过程是一组为完成特定功能的SQL语句集,这些语句经过编译后存储在数据库中,供用户通过指定存储过程名和参数(如有)来执行。存储过程被称作...

    sql server 2008 存储过程示例带游标

    下面将详细解析标题“sql server 2008 存储过程示例带游标”所涉及的知识点,包括存储过程的创建、游标的使用以及SQL Server 2008中的特性。 ### 存储过程 存储过程是预编译的SQL语句集合,存储在数据库服务器上,...

    SQLServer数据库游标和函数的使用(经典)

    在提供的文件"SQL游标t和函数的用法.sql"中,很可能是包含了一些示例代码,演示如何在SQL Server中使用游标和函数。你可以通过运行这个文件来学习具体的用法和技巧。通过实践,你会更加熟练地掌握这些工具,从而在...

    sql server和oracle的存储过程、游标示例

    在数据库管理领域,SQL Server和Oracle都是广泛应用的关系型数据库管理系统,它们都支持存储过程和游标的使用,这两种特性极大地增强了数据库的功能性和效率。存储过程是预编译的SQL语句集合,而游标则用于逐行处理...

    SQL Server存储过程之嵌套游标

    下面是一个订单取消的含2个游标的存储过程 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[CancelOrderBySystem] AS BEGIN declare /*声明变量*/ @Status varchar(100), –状态 ...

    自己做的存储过程含游标例子

    自己做的存储过程含游标例子,对于初学存储过程和游标的人有帮助

    SQL Server遍历表中记录的2种方法(使用表变量和游标)

    表变量在SQL Server中是一种临时存储数据的结构,它与临时表相似但作用范围更小,仅限于当前批处理或存储过程。以下是一个使用表变量的例子: ```sql DECLARE @temp TABLE (id INT IDENTITY(1, 1), Name VARCHAR(10...

    存储过程和游标

    在SQL Server中,创建一个存储过程可以使用`CREATE PROCEDURE`语句,如下所示: ```sql CREATE PROCEDURE procName @param1 datatype, @param2 datatype AS BEGIN -- SQL语句 END ``` 执行存储过程则通过`EXEC`...

    SQL学习教程-存储过程,游标,触发器

    在SQL Server 2008中,我们可以使用`CREATE PROCEDURE`语句来定义一个存储过程,然后通过`EXEC`命令来执行它。 2. 游标: 游标是一种允许数据库应用程序逐行处理结果集的技术。在处理大量数据时,如果我们需要逐条...

    Sql Server 游标的使用 事务的使用

    ### SQL Server 游标的使用与事务管理 #### 一、游标的使用方法 在 SQL Server 中,游标是一种用于处理结果集中的数据行的一种机制。它允许开发人员逐行访问查询的结果,这对于需要对每一条记录进行特定操作的场景...

    SQL Server 游标用法

    在SQL Server中,游标是一种重要的工具,它允许我们逐行处理查询结果集,而不仅仅是一次性获取所有数据。游标提供了在结果集中向前或向后移动的能力,这在某些复杂的数据处理任务中非常有用。本篇文章将深入探讨SQL ...

    在SQLSERVER2005下操作游标

    使用`FETCH NEXT`命令来获取游标下的下一行数据,并存储到变量中。例如: ```sql FETCH NEXT FROM @myCursor INTO @var1, @var2; WHILE @@FETCH_STATUS = 0 BEGIN -- 在此处处理@var1和@var2的值 FETCH NEXT ...

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

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

Global site tag (gtag.js) - Google Analytics