`
rsljdkt
  • 浏览: 453509 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

(总结) SQL Server Bulk Insert 批量数据导入

    博客分类:
  • DB
阅读更多

SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中,速度非常的快。远程文件必须共享才行,文件路径须使用通用约定(UNC)名称,即"\\服务器名或IP\共享名\路径\文件名"的形式。

 

* 1. 由于Bulk Insert通常配合格式化文件批量导入数据更方便,所以这里先介绍bcp工具导出格式化文件的方法。

bcp是SQL Server提供的命令行实用工具提供了数据的导出、导入、格式文件导出等功能,导出格式化文件的语法如下:

bcp 数据库名.用户名.表名 format nul -- 这里的nul必须存在,用于不是导出和导入数据的情况下
-f 输出的格式化文件名 [-x] -c  -- -x参数指定输出的格式文件为xml格式(默认非xml格式); -c参数指定数据存储方式为字符,并默认指定'\t'作为字段间隔符;'\n'作为行间隔符
[-t 字段间隔符] [-r 行间隔符号]  -- -t与-r参数可选,用于覆盖-c指定的默认间隔符
-T -- 指定数据库连接可信,即使用Windows身份登录

* 2. Bulk Insert

 根据格式文件导入数据文件,语法格式如下:

Bulk insert 数据库名.用户名.表名
from '数据文件路径'
with
(
formatfile = '格式文件路径',
FirstRow = 2	--指定数据文件中开始的行数,默认是1
)

 

* 3. OPENRORWSET(BULK)函数

有时,使用OPENROWSET(BULK)函数可以更灵活地选取想要的字段插入到原表或者其他表中,其语法格式为:

 INSERT INTO to_table_name SELECT filed_name_list
 FROM OPENROWSET(BULK N'path_to_data_file', FORMATFILE=N'path_to_format_file') AS new_table_name
  

  当然,该函数也可以这么使用:

SELECT field_name_list INTO temp_table_name
FROM OPENROWSET(BULK N'path_to_data_file', FORMATFILE=N'path_to_format_file') AS new_table_name
 

 

下面举一个完整的例子:

 

1)创建数据库、表并填充测试数据,脚本如下:

-- 创建数据库
CREATE DATABASE [db_mgr]
GO
--创建测试表
USE db_mgr
CREATE TABLE dbo.T_Student(
	F_ID [int] IDENTITY(1,1) NOT NULL,
	F_Code varchar(10) ,
	F_Name varchar(100) ,
	F_Memo nvarchar(500) ,
	F_Memo2 ntext ,
	PRIMARY KEY  (F_ID)
) 
GO

--填充测试数据
Insert Into T_Student(F_Code, F_Name, F_Memo, F_Memo2) select
'code001', 'name001', 'memo001', '备注001' union all select
'code002', 'name002', 'memo002', '备注002' union all select
'code003', 'name003', 'memo003', '备注003' union all select
'code004', 'name004', 'memo004', '备注004' union all select
'code005', 'name005', 'memo005', '备注005' union all select
'code006', 'name006', 'memo006', '备注006'

  2)我们可以使用SQL Server的master..xp_cmdshell存储过程将CMD的命令传给系统,这样就可以直接在SQL Server的查询处理器中直接输入bcp的命令,而不用切换到命令模式下执行。SQL Server 出于安全目的默认将该存储过程禁用了,开启方法如下:

--开启xp_cmdshell存储过程(开启后有安全隐患)
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;

 

3)使用bcp导出格式文件:

EXEC master..xp_cmdshell 'BCP db_mgr.dbo.T_Student format nul -f C:/student_fmt.xml -x -c -T'

 

4)使用bcp导出数据文件:

EXEC master..xp_cmdshell 'BCP db_mgr.dbo.T_Student out C:/student.data -f C:/student_fmt.xml -T'
truncate table db_mgr.dbo.T_Student -- 将表中数据清空

  注意:在实际使用过程中,数据文件可以由程序生成,如日志记录等!

 

5)使用Bulk Insert语句批量导入数据文件:

BULK INSERT db_mgr.dbo.T_Student
FROM 'C:/student.data'
WITH
(
	FORMATFILE = 'C:/student_fmt.xml'
)

 

6)使用OPENROWSET(BULK)的例子:

INSERT INTO db_mgr.dbo.T_Student(F_Code, F_Name) SELECT F_Code, F_Name
FROM OPENROWSET(BULK N'C:/student_c.data', FORMATFILE=N'C:/student_fmt_c.xml') AS new_table_name -- T_Student表必须已存在

SELECT F_Code, F_Name INTO db_mgr.dbo.tt
FROM OPENROWSET(BULK N'C:/student_c.data', FORMATFILE=N'C:/student_fmt_c.xml') AS new_table_name -- tt表可以不存在

 

 

参考:

使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据(尤其是关于安全的那部分,导入远程文件时应特别注意):

http://msdn.microsoft.com/zh-cn/library/ms175915.aspx

创建格式化文件:

http://msdn.microsoft.com/zh-cn/library/ms191516.aspx

OPENROWSET (Transact-SQL):

http://msdn.microsoft.com/zh-cn/library/ms190312.aspx

BULK INSERT (Transact-SQL):

http://msdn.microsoft.com/zh-cn/library/ms188365.aspx

bcp 实用工具:

http://msdn.microsoft.com/zh-cn/library/ms162802.aspx

2
5
分享到:
评论

相关推荐

    bulk insert导入数据

    - **定义**:`BULK INSERT` 是 SQL Server 提供的一种高效数据导入工具,能够帮助用户快速地将大量数据从文本文件导入到数据库表中。 - **优势**: - **高效性**:相比传统的 INSERT 语句,`BULK INSERT` 能够显著...

    .SqlBulkCopy.Extension第三方批量复制插入sqlServer数据库的dll程序集(支持批量数据合并插入)

    可以方便的将外部数据批量导入、批量合并导入、批量更新导入、批量删除到Sqlserver数据库,基本支持Sqlserver最新的数据库,我用的是Sqlserver2008R2,一点问题没有。共享一下。 需要批量导入数据的同学们,这是福音...

    Excel数据导入到SQLServer数据库中

    2. T-SQL语句:对于批量导入,可以使用BULK INSERT命令,指定Excel文件路径和数据库表结构。如果Excel文件包含多个工作表,可能需要循环处理。另一种方法是使用OPENROWSET函数,它可以直接读取Excel文件,但需要注意...

    sqlserver 批量创建表

    或者,如果数据量较大,可能使用BULK INSERT语句从CSV或其他数据源导入数据,这样更高效: ```sql BULK INSERT Table1 FROM 'C:\Data\file1.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n') BULK INSERT ...

    Sqlserver大数据量插入速度慢或丢失数据的解决方法

    2. **使用BULK INSERT命令**:将文本文件中的数据批量导入到数据库中。 ```sql BULK INSERT YourTable FROM 'C:\data.txt' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n'); ``` 3. **使用OPENROWSET...

    sql下三种批量插入数据的方法

    第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server 2008 中的新参数类型。表值参数是使用用户定义的表类型...

    sql server中批量导入的代码

    综上所述,给定的代码片段展示了如何在SQL Server中创建表、删除表以及如何使用`BULK INSERT`语句批量导入数据。这对于处理大量数据的场景非常有用,可以显著提高数据处理的效率。然而,在实际应用中,还需注意数据...

    SQL SERVER数据导入导出等辅助功能小工具

    对于编程人员,BULK INSERT T-SQL语句提供了直接从文件批量插入数据的功能,适用于大量数据的快速导入。用户需要指定表名、数据文件路径及字段分隔符等参数。 4. OPENROWSET函数: OPENROWSET函数可以直接读取...

    百万级数据在Excel和Sql数据库之间相互导入、导出

    例如,BULK INSERT命令适用于大批量导入,而SELECT INTO语句可用于创建新表并填充数据。 4. **Power Query/Microsoft Query**:Power Query(在Excel 2016及以后版本中)或Microsoft Query(在较早版本中)允许用户...

    Bulk Insert 批量操作数据库类

    在.NET框架中,当需要高效地将大量数据从一个数据源(如DataTable)批量导入到SQL Server数据库时,我们可以利用`SqlBulkCopy`类。这个类提供了快速且高效的批量插入功能,大大提升了数据迁移的效率,尤其对于大数据...

    sql-数据批量导入

    - **BULK INSERT**:SQL Server支持BULK INSERT语句,可以直接从CSV或文本文件导入数据。你需要创建一个T-SQL脚本,指定文件路径、字段分隔符等参数。 - **LOAD DATA INFILE**:在MySQL中,使用LOAD DATA INFILE...

    SQL Server中导入导出数据三方法比较

    BCP(Bulk Copy Program)是SQL Server提供的一个命令行工具,用于快速地将大量数据导入到SQL Server数据库中或将数据导出到文件。BCP支持并行操作,可以显著提高数据加载的速度。以下是使用BCP进行数据导入导出的...

    把CSV文件导入到SQL Server表中的方法

    有时候我们可能会把CSV中的数据导入...我们使用的是SQL Server的BULK INSERT命令,关于该命令的详细解释,请点击此处; 我们先在SQL Server中建立用于保存该信息的一张数据表, CREATE TABLE CSVTable( Name NVARCHA

    SQL Server SQL语句导入导出大全

    为了将数据从文本文件批量导入到 SQL Server,使用 BULK INSERT 库名..表名 FROM ’c:test.txt’ WITH ( FIELDTERMINATOR = ’;’, ROWTERMINATOR = ’n’ ) 命令。这里使用了 BULK INSERT 语句来批量导入数据。 ...

    excel数据导入到sql server数据库中,

    - **BULK INSERT T-SQL命令**:对于大量数据,可以使用BULK INSERT语句直接从Excel文件批量导入数据。需要将Excel文件保存为CSV格式,因为BULK INSERT只支持文本格式。 - **Openrowset函数**:通过在查询中使用...

    SQLSERVER_后台导入二进制数据方法.doc

    SQLSERVER 后台导入二进制数据方法 SQL Server 是一种功能强大的关系数据库管理系统,它提供了多种方式来导入二进制数据,包括使用 BULK INSERT 指令、使用 OPENROWSET 函数、使用 XML 等。但是在某些情况下,我们...

    sql server 批量导入省市县街道四级数据

    ### SQL Server 批量导入省市县街道四级数据详解 #### 一、背景介绍 在进行地理信息系统(GIS)开发或数据库构建时,往往需要将大量的行政区划数据(如省、市、县、街道等)导入到数据库中。这些数据不仅数量庞大,...

    从Excel导入数据到Sqlserver 2008 R2

    7. **批量导入和性能优化**:如果你需要导入大量数据,可以考虑使用BULK INSERT命令或者导入/导出向导,它们可以提高导入速度并减少资源消耗。不过,这些方法可能需要更高级的SQL知识。 8. **错误处理和事务**:在...

    sql.rar_Bulk Insert

    在SQL Server中,Bulk Insert是一个非常实用的工具,用于快速大量地将数据导入数据库表。在标题"sql.rar_Bulk Insert"中,我们关注的是如何使用Bulk Insert来提高数据库的导入速度,特别是在处理大规模数据时。这个...

Global site tag (gtag.js) - Google Analytics