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

 

转载于:https://www.cnblogs.com/wangYangBlog/p/3783793.html

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值