大量的数据,用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

你可能感兴趣的:(数据库,c#)