设为首页 加入收藏

TOP

BCP导出导入大容量数据实践(一)
2015-11-21 01:40:58 来源: 作者: 【 】 浏览:4
Tags:BCP 导出 导入 大容量 数据 实践
?
前言
?
SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文件。各有优缺点,以适用不同的需求。下面介绍大容量数据导出导入的利器——BCP实用工具。同时在后面也介绍BULK INSERT导入大容量数据,以及BCP结合BULK INSERT做数据接口的实践(在SQL2008R2上实践)。
?
1. BCP的用法
?
BCP 实用工具可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据。使用 BCP实用工具可以将大量新行导入 SQL Server 表,或将表数据导入数据文件。除非与 queryout 选项一起使用,否则使用该实用工具不需要了解 Transact-SQL 知识。BCP既可以在CMD提示符下运行,也可以在SSMS下执行。
?
?
figure-1
?
语法:

bcp {[[database_name.][schema].]{table_name | view_name} | "query"}
    {in | out | queryout | format} data_file
    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]
    [-Ffirst_row] [-Llast_row] [-bbatch_size]
    [-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )] 
    [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term] 
    [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
    [-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword]
    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

?

?
简单的导出例子1:
?
?
figure-2
?
简单的导出例子2:
?
?
figure-3
?
?
?
在SSMS上同时也可以执行:
?
EXEC [master]..xp_cmdshell
'BCP TestDB_2005.dbo.T1 out E:\T1_02.txt -c -T'
GO
code-1
?
?
?
figure-4
?
?
?
?
?
EXEC [master]..xp_cmdshell
'BCP "SELECT * FROM TestDB_2005.dbo.T1" queryout E:\T1_03.txt -c -T'
GO
code-2
?
?
?
figure-5
?
?
?
从个人来讲,我更喜欢使用第二种跟queryout选项一起使用的写法,因为这样可以更加灵活控制要导出的数据。如果执行BCP命令遇到这样的错误提示:
?
Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', see "Surface Area Configuration" in SQL Server Books Online.
?
基于安全的考虑,系统默认没有开启xp_cmdshell选项。使用下面语句开启此选项。
?
?
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

?

?
code-3
?
?
?
使用完之后,可以把sp_cmdshell关闭。
?
?
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE
GO

?

?
code-4
?
?
?
BCP导入数据
?
修改figure-2中的out为in即可,把数据导入。
?
?
figure-6
?
?
?
?
figure-7
?
?
?
使用BULK INSERT导入数据
?
BULK INSERT dbo.T1 FROM 'E:\T1.txt'
WITH (
? ? FIELDTERMINATOR = '\t',
? ? ROWTERMINATOR = '\n' ? ?
)
code-5
?
?
?
figure-8
?
?
?
?
相比BCP的导入,BULK INSERT提供更灵活的选择。
?
?
?
BCP几个常用的参数说明:
?
database_name 指定的表或视图所在数据库的名称。如果未指定,则使用用户的默认数据库
in?|?out|?queryout?|?format
  • in?从文件复制到数据库表或视图。

  • out?从数据库表或视图复制到文件。如果指定了现有文件,则该文件将被覆盖。提取数据时,请注意?bcp?实用工具将空字符串表示为 null,而将 null 字符串表示为空字符串。

  • queryout?从查询中复制,仅当从查询大容量复制数据时才必须指定此选项。

  • format?根据指定的选项(-n-c-w?或?-N)以及表或视图的分隔符创建格式化文件。大容量复制数据时,bcp?命令可以引用一个格式化文件,从而避免以交互方式重复输入格式信息。format?选项要求指定?-f?选项;创建 XML 格式化文件时还需要指定?-x?选项。

    in?从文件复制到数据库表或视图。
    out?从数据库表或视图复制到文件。如果指定了现有文件,则该文件将被覆盖。提取数据时,请注意?bcp?实用工具将空字符串表示为 null,而将 null 字符串表示为空字符串。
    queryout?从查询中复制,仅当从查询大容量复制数据时才必须指定此选项。
-c 使用字符数据类型执行该操作。此选项不提示输入每个字段;它使用 char 作为存储类型,不带前缀;使用?\t(制表符)作为字段分隔符,使用?\r\n
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Sql――CTE公用表表达式和With用.. 下一篇T-SQL中的CROSSJOIN用法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: