sql insert触发器 批量插入 游标

  本人目前就职于一家B2C网站,今天在工作中碰到了一个问题,就是需要把有着几百万条数据的订单表table1数据复制到另一个提供给商户查看的表table2中,在插入到table2表时需要对新插入的数据进行分析分别录入到table3表和table4表中,同是table2表中数据保留。如果把查询出来的数据ctrl+c到table2中触发器会有效果,不过百十万的数据让我去粘的话,今天就可以歇着了!

  当我们想要使用insert into table1 select * from
table2时,触发器只会执行table2中的第一行。这个时候我们就要使用游标控制插入数据的节奏(LOL玩多了。。。).以下是我今天上午研究的结果,以前没接触过游标,可能有些地方注释的并不正确,谅解!


 1 ALTER TRIGGER [dbo].[tri_table2]
2 ON [dbo].[table2] --建立在哪张表上
3 instead of INSERT --插入前触发
4 AS
5 BEGIN
6 --定义变量用于传值
7 DECLARE @MchId VARCHAR(10)
8 DECLARE @MchNo VARCHAR(50)
9 DECLARE @ProductCode VARCHAR(50)
10 DECLARE @SuccGetCardTime DATETIME
11 DECLARE @BuyNo VARCHAR(50)
12 DECLARE @BuyCall VARCHAR(50)
13 DECLARE @SectionNo VARCHAR(50)
14 --创建游标
15 DECLARE YB CURSOR FOR
16 SELECT [MchNo],[MchId],[ProductCode],[SuccGetCardTime],[BuyNo],[BuyCall],[SectionNo]FROM INSERTED--游标读取行信息
17 OPEN YB --打开游标
18 FETCH NEXT FROM YB INTO @MchNo,@MchId,@ProductCode,@SuccGetCardTime,@BuyNo,@BuyCall,@SectionNo--把游标读取到的第一行信息赋值到变量中
19 WHILE @@FETCH_STATUS = 0 --[代表是否读取到数据行]0操作成功,-1 FETCH 语句失败或此行不在结果集中,-2 被提取的行不存在
20 BEGIN
21 --判断表中是否存在该订单
22 IF NOT EXISTS(SELECT 1 FROM table3 WHERE MchNo=@MchNo AND MchId=@MchId)
23 BEGIN
24 --数据迁移到table3表
25 INSERT INTO table3
26 VALUES(@MchNo,@MchId,@ProductCode,@SuccGetCardTime,@BuyNo,@BuyCall,@SectionNo)
27
28 IF(@MchId=‘BJFW‘ OR @MchId=‘BJF2‘)
29 BEGIN
30 --数据迁移到table4表
31 INSERT INTO table4
32 VALUES(@MchNo,@MchId,@ProductCode,@SuccGetCardTime,@BuyNo,@BuyCall,@SectionNo)
33 END
34 END
35 --完成Work_TradeInfo表数据录入
36 INSERT INTO table2
37 VALUES(@MchNo,@MchId,@ProductCode,@SuccGetCardTime,@BuyNo,@BuyCall,@SectionNo)
38 --游标跳到下一行继续循环
39 FETCH NEXT FROM YB INTO @MchNo,@MchId,@ProductCode,@SuccGetCardTime,@BuyNo,@BuyCall,@SectionNo
40 END
41 CLOSE YB --关闭游标
42 DEALLOCATE YB --释放游标
43 END

sql insert触发器 批量插入 游标,布布扣,bubuko.com

时间: 2024-10-22 06:46:53

sql insert触发器 批量插入 游标的相关文章

一条insert语句批量插入多条记录 AND 多条件游标更新 变CASE WHEN更新法提高速度

一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , firstName, city ) values(204,'haha' , 'deng' , 'shenzhen'); (如上,仅插入了一条记录) 怎样一次insert插入多条记录呢? 使用示例: insert into persons (id_p, lastname , firstName, city ) values

MyBatis直接执行SQL查询及批量插入数据

MyBatis直接执行SQL查询及批量插入数据 一.直接执行SQL查询: 1.mappers文件节选 <resultMap id="AcModelResultMap" type="com.izumi.InstanceModel">  <result column="instanceid" property="instanceID" jdbcType="VARCHAR" />  <

SQL表值参数批量插入

--使用表值参数向另一数据表中批量插入数据 USE DF17DataPro--创建并使用表值参数步骤/*1.创建表类型并定义表结构.有关如何创建 SQL Server 类型的信息,请参阅用户定义表类型.有关如何定义表结构的详细信息,请参阅 CREATE TABLE (Transact-SQL).2.声明具有表类型参数的例程.有关 SQL Server 例程的详细信息,请参阅 CREATE PROCEDURE (Transact-SQL) 和 CREATE FUNCTION (Transact-S

sql server触发器实现插入时操作另一张表

以前都是也得mysql,现在写sqlserver的触发器,感觉改动还是蛮大的 1.定义变量 #在mysql中变量直接这么定义就可以了 SET @VALUE = "111"; #在sql server中 declare @count int; #并赋值 set @count =0; #如果是查询,必须这么些 select @count = count(*) from WQ_MNINF_D_REAL where [email protected]; 2.判断 在mysql中,if判断的格式

sql server中批量插入与更新两种解决方案分享(存储过程)

转自http://www.shangxueba.com/jingyan/1940447.html 1.游标方式 复制代码代码如下: DECLARE @Data NVARCHAR(max) SET @Data='1,tanw,2,keenboy' --Id,Name DECLARE @dataItem NVARCHAR(100) DECLARE data_cursor CURSOR FOR (SELECT * FROM split(@Data,';')) OPEN data_cursor FETC

sql server中批量插入与更新两种解决方案分享

若只是需要大批量插入数据使用bcp是最好的,若同时需要插入.删除.更新建议使用SqlDataAdapter我测试过有很高的效率,一般情况下这两种就满足需求了 bcp方式 复制代码 代码如下: /// <summary> /// 大批量插入数据(2000每批次) /// 已采用整体事物控制 /// </summary> /// <param name="connString">数据库链接字符串</param> /// <param n

SQL批量插入数据

MS SQL Server数据库批量插入数据的sql语句总结: 第一种: insert into tb_NameList(Name,InsertDate,UpdateDate) values('aa',GETDATE(),GETDATE()) insert into tb_NameList(Name,InsertDate,UpdateDate) values('bb',GETDATE(),GETDATE()) insert into tb_NameList(Name,InsertDate,Upd

向mysql中批量插入数据的性能分析

MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下   CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VARCHAR( 50 ) NOT NULL,other_value VARCHAR( 50 ) NOT NULL) 通常情况下单条插入的sql语句我们会这么写: 代码如下   INSERT INTO example(example_id, name, valu

MYSQL批量插入数据库实现语句性能分析

假定我们的表结构如下 代码如下   CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCHAR( 50 ) NOT NULL, other_value VARCHAR( 50 ) NOT NULL ) 通常情况下单条插入的sql语句我们会这么写: 代码如下   INSERT INTO example (example_id, name, value, other_value)