数据的导入导出是数据库管理员常见的工作任务之一,尤其是平面文件的导入导出。BCP 工具则为这些任务提供了强有力的支持,它是基于DB-Library,尤其是在生产环境中,从本地传送数据到服务器或从服务器传送数据到本地,因它无需提供图形界面,减少网络带宽,提高了传输速率。BCP的全称是BULK COPY PROGRAM,它是一个命令行程序,可以完全脱离SQL server进程来实现。

常用的导入方式:bcp, BULK INSERT,OPENROWSET,or SSIS。

本文主要介绍bcp工具的使用,其他的如BULK INSERT,OPENROWSET,or SSIS请参见后续博文。

bcp的使用:可以在SQL Server 2005 实例和用户指定格式的数据文件间实现大容量复制数据,可以将平面文件导入到SQL server表,也可以将SQL server表导出为文件。该命令为一个DOS命令,通常位于x:/Program Files/Microsoft SQL Server/90/Tools/Bin目录下,可以在命令提示符下使用。

以下简要列出其语法:
    语法:bcp {[[database_name.][owner].]{table_name | view_name} | "query"}     --指定相应的数据库名,表名,视图名或SQL查询语句,查询语句使用双引号括起来。

{in | out | queryout | format} data_file         --数据流动的方向,in导入,out导出,queryout结果集 及指定data_file文件。
     [-mmax_errors] [-fformat_file] [-x] [-eerr_file]                         --bcp的错误处理选项
      [-Ffirst_row] [-Llast_row] [-bbatch_size]                                --可以指定特定行数
      [-n] [-c] [-N] [-w] [-V (60 | 65 | 70 | 80)] [-6]                        --有关字符编码选项,通常很少使用
      [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term] 
      [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
      [-Sserver_name[/instance_name]] [-Ulogin_id] [-Ppassword]               --指定登陆的服务器名、实例名及登陆账户密码。
      [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]                             --hint提示使用TABLOCK或CHECK_CONSTRAINTS,FIRE_TRIGGERS 等通常用于支持最小日志记录

几个常用的参数:-f format_file

format_file表示格式文件名。这个选项依赖于上述的动作,如果使用的是in或out,format_file表示已经存在的格式文件,如果使用的是format则表示是要生成的格式文件。

-x                     这个选项要和-f format_file配合使用,以便生成xml格式的格式文件。

-F first_row      指定从被导出表的哪一行导出,或从被导入文件的哪一行导入。

-L last_row      指定被导出表要导到哪一行结束,或从被导入文件导数据时,导到哪一行结束。

-c                     使用char类型做为存储类型,没有前缀且以"/t"做为字段分割符,以"/n"做为行分割符。

-w                   和-c类似,只是当使用Unicode字符集拷贝数据时使用,且以nchar做为存储类型。

-t field_term    指定字符分割符,默认是"/t"。

-r row_term     指定行分割符,默认是"/n"。

-S server_name[ /instance_name]    指定要连接的SQL Server服务器的实例,如果未指定此选项,bcp连接本机的SQL Server默认实例。如果要连接某台机器上的默认实例,只需要指定机器名即可。

-U login_id       指定连接SQL Sever的用户名。

-P password    指定连接SQL Server的用户名密码。

-T                     指定bcp使用信任连接登录SQL Server。如果未指定-T,必须指定-U和-P。

-k                     指定空列使用null值插入,而不是这列的默认值。

权限:
    bcp out 操作要求对源表有 SELECT 权限。
    bcp in 操作要求至少对目标表有 SELECT/INSERT 权限。
    当被导入的表中存在CHECK约束和TRIGGER时,缺省的行为为关闭,不要指定-h 选项和 CHECK_CONSTRAINTS  以及FIRE_TRIGGERS 提示。故需要对表有Alter table 权限。

一、bcp导出到平面文件
    1.将表复制到平面文件(使用信任连接,使用参数 -T),在命令提示符下输入以下语句

bcp AdventureWorks.Sales.SalesOrderHeader OUT d:/SalesOrders.txt -c -T     -- -T表示使用可信任的连接

Starting copy...
1000 rows successfully bulk-copied to host-file. Total received: 1000
1000 rows successfully bulk-copied to host-file. Total received: 2000
--.........省略
--.........省略
31465 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 454    Average : (69306.17 rows per sec.)

使用xp_cmdshell存储过程来执行bcp,鉴于演示的方便,后续的处理将全部采用xp_cmdshell来实现。
EXEC xp_cmdshell 'bcp AdventureWorks.Sales.SalesOrderHeader OUT d:/SalesOrders1.txt -c -T'

2.将表复制到平面文件(使用混合身份验证,使用参数 -U —P,例如:-U"Test" -P"Test" , -U后的用户名和-P后的密码加上双引号)
EXEC xp_cmdshell 'bcp AdventureWorks.Sales.SalesOrderHeader OUT d:/SalesOrders2.txt -c -U"Test" -P"Test"'

3.将指定的列或行复制到平面文件
EXEC xp_cmdshell    --导出指定的列 使用到了queryout
'bcp "SELECT SalesOrderID,OrderDate,SalesOrderNumber FROM AdventureWorks.Sales.SalesOrderHeader"  queryout d:/SalesOrders3.txt -c -U"Test" -P"Test" '

EXEC xp_cmdshell    --导出指定的行,查询结果中的第20到第40条记录, 使用到了queryout
'bcp "SELECT TOP(50) SalesOrderID,OrderDate,SalesOrderNumber FROM AdventureWorks.Sales.SalesOrderHeader WHERE OrderDate >= ''20040101''"  queryout d:/SalesOrders4.txt -c -F 20 -L 40 -T '

二、bcp导出格式文件
    格式文件分为一般格式文件和XML格式文件,以下示例将SalesOrderHeader表的格式形成一个一般格式文件,也称为非XML 格式化文件。
EXEC xp_cmdshell 'bcp AdventureWorks.sales.SalesOrderHeader format nul -f d:/SalesOrders_format.fmt -c -T  '  
----------------
9.0                
27           --字段总数,多出的字段被省略,以下分别给出了字段的序号,类型,长度,分隔符,字段名等信息。
1       SQLCHAR       0       12      "/t"     1     SalesOrderID                                     ""
2       SQLCHAR       0       5       "/t"     2     RevisionNumber                                   ""
3       SQLCHAR       0       24      "/t"     3     OrderDate                                        ""
4       SQLCHAR       0       24      "/t"     4     DueDate

""
XML 格式化文件
EXEC xp_cmdshell 'bcp AdventureWorks.sales.SalesOrderHeader format nul  -x -f d:/SaOrders_format_x.xml -c -T  ' 
非XML格式化文件与XML格式化文件两者用不同的方式来描述原始表的结构,其实质是一样的。

bcp导入平面文件到数据库表
创建新表NewOrderHeader,然后将前面导出的数据导入到新表

SELECT * INTO NewOrderHeader FROM sales.SalesOrderHeader WHERE 1=2
EXEC [master]..xp_cmdshell 'bcp AdventureWorks..NewOrderHeader in d:/SalesOrders.txt -c -T'
SELECT * FROM NewOrderHeader

使用格式化文件实现bcp的大容量导入

TRUNCATE TABLE NewOrderHeader
EXEC [master]..xp_cmdshell 'bcp AdventureWorks..NewOrderHeader in d:/SalesOrders.txt -f d:/Currency.xml -F 2000 -L 4000 -c -T'
SELECT * FROM NewOrderHeader

SQL server 数据导入导出BCP工具使用详解相关推荐

  1. sql server数据库导入导出bcp方法

    微软的官方文档: http://msdn.microsoft.com/zh-cn/library/ms162802.aspx 以下示例均在sql server 2005上测试过,完全ok可用的. 1. ...

  2. 转载-SQL Server各种导入导出数据方式的比较

    注:本文转载自 http://blog.csdn.net/nokiaguy/article/details/4684822 当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新 ...

  3. SQL Server数据库导入导出数据方式比较

    在我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验.净化和转换时,将会面临很大的挑战.幸好SQL Server为我们提供了强大.丰富的数据 ...

  4. Excel与Sql Server互通导入导出跨语言

    目录 Excel与Sql Server互通导入导出跨语言 1.目标Excel缺少表的列标题字段 1.1.问题的提出从这里开始 1.2.参数的正确写法 1.3.附带说一下Jet 4.0 1.4.附带说一 ...

  5. 将本地的MS SQL Server数据导入到远程服务器上

    该演示引导客户将本地的MS SQL Server数据导入到远程服务器上,供客户的网站使用. 首先登录到远程数据库服务器: 1.右击您准备导入数据的数据库,选择"所有任务"下的&qu ...

  6. php实现sql server数据导入到mysql数据库_php实现SQL Server数据导入Mysql数据库(示例)...

    php将mssql的数据导入到mysql数据库中,代码: 代码示例: //连接SQL server数据库 $conn=mssql_connect("localhost"," ...

  7. SQL AZURE数据导入导出,云计算体验之四

    SQL AZURE数据导入导出 我们在之前的文章中为大家介绍了如何在SQL AZURE上创建数据库及管理数据库,从之前的介绍中我们可以看出,SQL AZURE是完全可以满足小型企业的数据库业务需求的. ...

  8. mysql navicat导入bcp_SQL Server数据导入导出工具BCP详解

    BCP是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据.BCP可以将数据库的表或视图直接导出,也能通过SELECT ...

  9. sql server 2008 导入导出数据大全

    /*******  导出到excel EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q - S&quo ...

  10. SQL Server 数据批量导出处理

    在实际项目环境中,有时会遇到需要将大量数据(这里所指百万级别以上的数据量)从一台服务器迁移到另外一台数据库服务器的情况.SQL Server有很多方式可以进行数据迁移:备份还原.导入/导出数据.生成脚 ...

最新文章

  1. 一文带你搞懂 MySQL 分区!
  2. SQL Server之存储过程基础知识
  3. html载入字体,css怎么导入字体?
  4. 为什么ajax请求进不来后端路由_为什么要前后端分离?前后端分离的优点是什么?...
  5. 二阶振荡衰减 matlab,基于Matlab/Simulink的二阶控制系统仿真研究
  6. Magicodes.IE编写多框架版本支持和执行单元测试
  7. 学以致用,Python定时采集微博评论
  8. ebm风扇选型手册_EBM风扇选择方法
  9. PocketLibs(3)—— 进度条 NProgress
  10. 一些意想不到的bug
  11. 论文:Scalable and accurate deep learning for electronic health records研读笔记
  12. Spring源码解析(一)
  13. MyEclipse10破解工具,crack下载
  14. 毕设论文-word格式问题
  15. Paper翻译:《A Novel Convolutional Neural Network Based Model for Recognition and Classification of App》
  16. vue 移动端校验(是否移动设备,安卓/IOS,是否微信浏览器)
  17. springboot+二手车交易系统 毕业设计-附源码131456
  18. 龙年贺词成语-龙字成语
  19. 工厂的生产管理系统,即时掌握车间生产动态
  20. 【CFD理论】对流项-02

热门文章

  1. Java:关于负数的向上转型
  2. 推荐给初学LSTM或者懂个大概却不完全懂的人
  3. MATLAB模式识别基本操作函数解析
  4. HBASE table导出到文件的方法
  5. 2021_0207_生活记录
  6. 一道学吧上的题 ^ 题目:不允许重复的实验 - 从数字1、2、3、4、5中随机抽取3次数字(不允许重复)组成一个三位数,则其各位数字之和等于n的概率为________ 输入整数 输出一个小数(保留
  7. angular 代码高亮_5个对Angular开发者有用的VSCode扩展
  8. MD5加盐(md5+salt)
  9. c语言文件名错误的是,C语言程序错误,不能正常读写文件,求解啊
  10. 日志管理Rsyslog