SQLSERVER 大数据导入探索

  公司最近开发了一个功能,就是通过excel直接往数据库中导入大批量数据。于是在网上查找了几种方法,探索如下:

1.通过insert to 语句

实现:通过将数据导入到DataTable中然后逐条生成sql插入语句导入数据。

优点:简单

缺点:只能应付小数据,所以对于大数据不推荐

2.通过SqlBulkCopy方式

实现:

SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction);

sqlbulkcopy.DestinationTableName = "Product";//数据库中的表名

sqlbulkcopy.ColumnMappings.Add("ProductID""ProductID");//映射

 sqlbulkcopy.ColumnMappings.Add("ProductName""Name");

sqlbulkcopy.WriteToServer(dataset.Tables[0]);

优点:快

缺点:只能将数据直接复制到正式表中,不能将数据直接导入到tempdb数据库中的临时表中;SqlBulkCopy操作可能会导致对目标表元数据的更改(例如,禁用约束检查  时)。如果出现这种情况,访问大容量插入表的并发快照隔离事务将失败SqlBulkCopy将向数据库下大容量更新锁,请注意并发性,以免其他连接因长时间等待而超时

机制:(1)利用BCP协议进行数据批量复制

3.使用标值参数

实现:

  数据库执行脚本如下

  CREATE TYPE TestType AS TABLE (  Id int NOT NULL  ,Name nvarchar(20) NOT NULL )

  CREATE PROC InsertData  @rows TestType READONLY as begin  set nocount on  insert into TestTable(Id, Name)   select Id, Name from @rows end

                  SqlParameter param = cmd.Parameters.AddWithValue("@rows", tempTable);  

                  param.SqlDbType = SqlDbType.Structured;  

                 param.TypeName = "TestType";  

               cmd.ExecuteNonQuery();  

 

优点:速度中等

缺点:要在数据库中创建表类型数据

posted @ 2013-07-06 14:11  wuhuidelang  阅读(387)  评论(0编辑  收藏  举报