大量的数据,用sql数据库指令怎么解决?

我原先用sql语句执行插入语句,数据量一大就很慢比如上万条。后来我用SqlBulkCopy插入到SQLSEVER数据中

C# code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using  (System.Data.SqlClient.SqlBulkCopy sqlBC =  new  System.Data.SqlClient.SqlBulkCopy(strcon,SqlBulkCopyOptions.FireTriggers))
                 {
                     sqlBC.BatchSize = 100000;
                     sqlBC.BulkCopyTimeout = 120;
                     sqlBC.DestinationTableName =  "dbo.DX_Customer" ;
                     sqlBC.ColumnMappings.Add( "姓名" "CustomerName" );
                     sqlBC.ColumnMappings.Add( "性别" "Sex" );
                     sqlBC.ColumnMappings.Add( "地址" "Address" );
                     sqlBC.ColumnMappings.Add( "单位" "Company" );
                     sqlBC.ColumnMappings.Add( "手机" "Mobile" );
                     sqlBC.ColumnMappings.Add( "电话" "Telephone" );
                     sqlBC.ColumnMappings.Add( "邮箱" "Email" );
                     sqlBC.WriteToServer(dtExcelImport);
                 }


在dbo.DX_Customer这个表中有个客户编号这一列,这列是执行只定义函数自动生成的,但是SqlBulkCopy无法执行自定义函数。后来发现使用SqlBulkcopy时在insert触发器的inserted表中是有多条记录的,且一次调用SqlBulkcopy只会有一次触发器的运行。我在触发器给中用游标循环inserted表可是这样数据量一大也会慢

SQL code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
createtrigger [dbo].[CustomerNumber]
on  [dbo].[DX_Customer]
After  insert 
as
declare  @ID  int
 
--定义游标获取符和条件的客户   
     declare  cursor_title  cursor  for
     select  ID  from  inserted
     
     --打开游标
     open  cursor_title
     
     --提取游标第一行
     fetch  next  from  cursor_title  into  @ID
     
     --循环提取游标内容
     while @@FETCH_STATUS=0
         begin
             declare  @Code  varchar (10)
             declare  @ Date  varchar (4)
             set  @ Date SUBSTRING ( CONVERT ( varchar (100), GETDATE(), 12),1,4)
             select  @Code= MAX (CustomerNumber)  from  DX_Customer  where  CustomerNumber  like  '' +@ Date + '%'  and  CustomerNumber  is  not  null
             if @Code>0
                 begin
                 set  @Code=@Code+1
                 end
             else
                 begin
                 set  @Code=@ Date + '00001'
                 end
             update  DX_Customer  set  CustomerNumber=@Code  where  DX_Customer.ID=@ID
         --获取游标下一行
         fetch  next  from  cursor_title  into  @ID
         end
 
     --关闭游标     
     close  cursor_title     
     --释放游标资源     
     deallocate  cursor_title


各位有什么好的办法,数据量是1万条以上的

转载于:https://www.cnblogs.com/ahwankong/p/3297133.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值