`
guyongpeng
  • 浏览: 61535 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

利用游标在Sql Server里复制父子关联表数据

阅读更多
源表为t_src_table_parent和t_src_table_child,为父子关系
目的表为t_dest_table_parent和t_dest_table_child,表结构与源表一致

目标是将源表的数据原样插入到目的表中,父子关系不变,transaction sql如下:


declare 
	@t_udf_id int,	@t_aspaccount_id int,	@field_name varchar (32),	@name_en nvarchar (50),	@name_cn nvarchar (50),	@name_en_enterprise nvarchar (50),	@name_cn_enterprise nvarchar (50),	@field_type char (1),	@field_length int,	@field_decimal smallint,	@descr nvarchar (200),	@status char (1),	@is_enterprise char (1),	@seq_no int,	@creator_id int,	@modifier_id int
declare 
	@option_T_UDF_OPTION_id int,	@option_t_udf_id int,	@option_t_aspaccount_id int,	@option_option_name nvarchar (100),	@option_seq_no smallint,	@option_aliases nvarchar,	@option_is_buildin char (1) 

declare @loop_counter int,@total_count int,@outer_loop_counter int,@outer_total_count int

select @outer_total_count = Count(*)  from t_src_table_parent

DECLARE src_table_parent_cursor CURSOR FOR 
SELECT 
	t_udf_id,	t_aspaccount_id,	field_name,	name_en,	name_cn,	name_en_enterprise,	name_cn_enterprise,	field_type,	field_length,	field_decimal,	descr,	status,	is_enterprise,	seq_no,	creator_id,	modifier_id
FROM t_src_table_parent

open src_table_parent_cursor 

set @outer_loop_counter=0

WHILE @outer_loop_counter <@outer_total_count
Begin
	FETCH  NEXT FROM src_table_parent_cursor
	INTO 
		@t_udf_id,	@t_aspaccount_id,	@field_name,	@name_en,	@name_cn,	@name_en_enterprise,	@name_cn_enterprise,	@field_type,	@field_length,	@field_decimal,	@descr,	@status,	@is_enterprise,	@seq_no,	@creator_id,	@modifier_id
	insert into t_dest_table_parent(
		t_udf_id,	t_aspaccount_id,	field_name,	name_en,	name_cn,	name_en_enterprise,	name_cn_enterprise,	field_type,	field_length,	field_decimal,	descr,	status,	is_enterprise,	seq_no,	creator_id,	modifier_id
	) values(
		@t_udf_id,	@t_aspaccount_id,	@field_name,	@name_en,	@name_cn,	@name_en_enterprise,	@name_cn_enterprise,	@field_type,	@field_length,	@field_decimal,	@descr,	@status,	@is_enterprise,	@seq_no,	@creator_id,	@modifier_id
	)
	
	------处理子表
	
	select @total_count = Count(*)  from t_src_table_child where t_udf_id=@t_udf_id
	
	DECLARE t_udf_option_test_cursor CURSOR FOR 
	SELECT 
		T_UDF_OPTION_id,	t_udf_id,	t_aspaccount_id,	option_name,	seq_no,	aliases,	is_buildin
	FROM t_src_table_child 
	where t_udf_id=@t_udf_id
	
	open t_udf_option_test_cursor
	
	set @loop_counter=0
	
	WHILE @loop_counter <@total_count
	BEGIN
		FETCH  NEXT FROM t_udf_option_test_cursor
		INTO 
			@option_T_UDF_OPTION_id,	@option_t_udf_id,	@option_t_aspaccount_id,	@option_option_name,	@option_seq_no,	@option_aliases,	@option_is_buildin
		insert into t_dest_table_child(
			T_UDF_OPTION_id,	t_udf_id,	t_aspaccount_id,	option_name,	seq_no,	aliases,	is_buildin)
		 values(
			@option_T_UDF_OPTION_id,	@option_t_udf_id,	@option_t_aspaccount_id,	@option_option_name,	@option_seq_no,	@option_aliases,	@option_is_buildin
		)
	set @loop_counter = @loop_counter + 1
	END
	
	close t_udf_option_test_cursor
	DEALLOCATE t_udf_option_test_cursor 

	set @outer_loop_counter = @outer_loop_counter + 1
end

close src_table_parent_cursor

DEALLOCATE src_table_parent_cursor
分享到:
评论

相关推荐

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

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

    SqlServer存储过程、游标讲解

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

    SQL Server 游标用法

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

    sql server 游标实例

    在SQL Server中,游标是一种数据库对象,允许我们逐行处理查询结果集中的数据。这与普通的SQL查询不同,在普通的查询中,结果集通常是作为一个整体来处理的。游标常用于需要对数据进行迭代处理的情况,例如更新或...

    SQL Server 游标的简单使用

    SQL Server对游标的使用要遵循:声明游标–打开游标–读取数据–关闭游标–删除游标。下面让我们来看看几种常用游标是怎么使用的! 1、只读游标的使用(只能使用next提取数据) --声明一个只读游标 declare cur_stu ...

    SQL Server -事务和游标

    在SQL Server数据库管理系统中,事务和游标是两个非常重要的概念,它们对于数据操作和处理具有深远的影响。本文将深入探讨这两个主题,并解释如何利用它们解决日常数据库管理中遇到的复杂问题。 首先,我们来谈谈...

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

    在SQL Server中,数据库游标和函数是两个非常重要的概念,它们在数据处理和数据库操作中扮演着不可或缺的角色。游标允许我们逐行处理查询结果,而函数则提供了丰富的计算和逻辑处理能力。 首先,让我们深入理解SQL ...

    sql server 游标试用方法 例子

    在SQL Server中,游标是一种数据处理工具,它允许我们逐行处理查询结果集,而不仅仅是一次性返回所有数据。游标对于那些需要按顺序处理数据、分步操作或逐条检查结果的应用场景非常有用。本篇文章将深入探讨SQL ...

    sql server游标的使用

    sql server 游标 使用的使用方法 --读取数据(使用FETCH来获取该记录的值;FETCH会执行两步操作:首先将游标当前指向的记录保存到一个局部变量中, --然后游标将自动移向下一条记录) --将一条或多条记录读入某个...

    SqlServer存储过程游标

    通过本例,我们可以看到如何在SQL Server中创建和使用存储过程以及如何利用游标来遍历结果集并进行数据操作。存储过程和游标都是SQL Server中非常重要的工具,它们能够帮助开发者更高效地管理和操作数据库中的数据。...

    SQL Server游标遍历,并比较值

    在sql中,通过id查询出一个字段的值ordernumber,利用游标循环遍历对应字段的值ordernumber1,(比较ordernumber是否存在,存在就在后+'_1',+'_2'...)

    Sqlserver游标拼接

    Sqlserver游标拼接学习,简单的游标学习,直接exec执行查看结果

    sqlserver --游标 实现数据分页

    在SQL Server中实现数据分页是一项常见的需求,尤其是在处理大量数据时,为了提高查询效率和用户体验,分页显示数据成为了数据库设计中的一个关键点。在给定的代码示例中,作者通过创建一个存储过程`proc_cursor`来...

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

    在SQL Server 2008中,存储过程与游标是数据库编程中常见的技术,用于实现复杂的业务逻辑和数据操作。下面将详细解析标题“sql server 2008 存储过程示例带游标”所涉及的知识点,包括存储过程的创建、游标的使用...

    MS SQLSERVER游标和锁的课件

    在MS SQL SERVER中,游标和锁是数据库管理中的重要概念,它们在处理复杂数据操作和确保数据一致性方面发挥着关键作用。 **游标** 游标,顾名思义,就像指针一样在结果集上移动,允许程序员逐行处理查询结果。它提供...

    SQL Server2000游标例子

    本文主要探讨了在SQL Server 2000中如何利用游标处理数据,并通过一个具体的示例来展示游标的使用方法。 #### 核心知识点解析 ##### 1. 游标简介 在SQL Server 2000中,游标是一种用于处理结果集中的行的机制。它...

    SQL Server 事务、异常和游标

    在数据库中有时候需要把多个步骤的指令当作一个整体来运行,这个整体要么全部成功,要么全部失败,这就需要用到事务。 1、 事务的特点 事务有若干条T-SQL指令组成,并且所有的指令昨晚一个整体提交给数据库系统...

    sql server 游标范例

    sql server 游标范例,多个demo基本涵盖了游标的使用技巧

    sqlserver游标存储过程的使用

    在SQL Server中,游标(Cursor)是一种数据库查询机制,它允许我们一次处理查询结果集中的单行数据,而不是一次性获取整个结果集。游标在处理大量数据时特别有用,尤其是当我们需要逐行进行操作或者根据当前行的值来...

    sqlserver2005游标使用

    游标循环数据库,游标循环数据库游标循环数据库游标循环数据库

Global site tag (gtag.js) - Google Analytics