关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server数据导入导出工具BCP详解

    SQL Server数据导入导出工具BCP详解

    2014-08-01 00:00:00 出处:ITJS
    分享

    BCP是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。BCP可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出。在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中。

    下面将详细讨论如何利用BCP导入导出数据。

    1. BCP的主要参数介绍

    BCP共有四个动作可以选择。
    (1) 导入。
    这个动作使用in命令完成,后面跟需要导入的文件名。
    (2) 导出。
    这个动作使用out命令完成,后面跟需要导出的文件名。
    (3) 使用SQL语句导出。
    这个动作使用queryout命令完成,它跟out类似,只是数据源不是表或视图名,而是SQL语句。
    (4) 导出格式文件。
    这个动作使用format命令完成,后而跟格式文件名。

    下面介绍一些常用的选项:

    -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值插入,而不是这列的默认值。

    2. 如何使用BCP导出数据

    (1) 使用BCP导出整个表或视图。

    BCP AdventureWorks.sales.currency out c:currency1.txt -c -U"sa" -P"password" --使用密码连接

    或

    BCP AdventureWorks.sales.currency out c:currency1.txt -c -T --使用信任连接

    下面是上述命令执行后的输出结果

    Starting copy...
    105 rows copied.
    Network packet size (bytes): 4096
    Clock Time (ms.) Total : 10 Average : (10500.00 rows per sec.)

    下面是currency1.txt的部分内容

    AED Emirati Dirham 1998-06-01 00:00:00.000
    AFA Afghani 1998-06-01 00:00:00.000
    ... ... ...
    ... ... ...
    ZWD Zimbabwe Dollar 1998-06-01 00:00:00.000

    在使用密码登录时需要将-U后的用户名和-P后的密码加上双引号。

    注:BCP除了可以在控制台执行外,还可以通过调用SQL Server的一个系统存储过程xp_cmdshell以SQL语句的方式运行BCP。如上述第一条命令可改写为

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency out c:currency1.txt -c -U"sa" -P"password"'

    执行xp_cmdshell后,返回信息以表的形式输出。为了可以方便地在SQL中执行BCP,下面的命令都使用xp_cmdshell执行BCP命令。

    (2) 对要导出的表进行过滤。

    BCP不仅可以接受表名或视图名做为参数,也可以接受SQL做为参数。通过SQL语句可以对要导出的表进行过滤,然后导出过滤后的记录。

    EXEC master..xp_cmdshell 'BCP "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:currency2.txt -c -U"sa" -P"password"'

    BCP还可以通过简单地设置选项对导出的行进行限制。

    EXEC master..xp_cmdshell 'BCP "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:currency2.txt -F 10 -L 13 -c -U"sa" -P"password"'

    这条命令使用了两个参数-F 10和-L 13,表示从SELECT TOP 20 * FROM AdventureWorks.sales.currency所查出来的结果中取第10条到13条记录进行导出。

    3. 如何使用BCP导出格式文件

    BCP不仅可以根据表、视图导入导出数据,还可以配合格式文件对导入导出数据进行限制。格式文件以纯文本文件形式存在,分为一般格式和xml格式。用户可以手工编写格式文件,也可以通过BCP命令根据表、视图自动生成格式文件。

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:currency_format1.fmt -c -T'

    上述命令将currency表的结构生成了一个格式文件currency_format1.fmt,下面是这个格式文件的内容。

    9.0
    3
    1 SQLCHAR 0 6 "t" 1 CurrencyCode SQL_Latin1_General_CP1_CI_AS
    2 SQLCHAR 0 100 "t" 2 Name SQL_Latin1_General_CP1_CI_AS
    3 SQLCHAR 0 24 "rn" 3 ModifiedDate

    这个格式文件记录了这个表的字段(共3个字段)类型、长度、字符和行分割符和字段名等信息。

    BCP还可以通过-x选项生成xml格式的格式文件。

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:currency_format2.fmt -x -c -T'

    xml格式文件所描述的内容和普通格式文件所描述的内容完全一样,只是格式不同。

    4. 如何使用BCP导入数据

    BCP可以通过in命令将上面所导出的currency1.txt和currency2.txt再重新导入到数据库中,由于currency有主键,因此我们将复制一个和currency的结构完全一样的表。

    SELECT TOP 0 * INTO AdventureWorks.sales.currency1 FROM AdventureWorks.sales.currency

    将数据导入到currency1表中

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:currency1.txt -c -T'

    导入数据也同样可以使用-F和-L选项来选择导入数据的记录行。

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:currency1.txt -c -F 10 -L 13 -T'

    在导入数据时可以根据已经存在的格式文件将满足条件的记录导入到数据库中,不满足则不导入。如上述的格式文件中的第三个字段的字符长度是24,假如某个文本文件中的相应字段的长度超过24,则这条记录将不被导入到数据库中,其它满足条件的记录正常导入。

    使用普通的格式文件

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:currency1.txt -F 10 -L 13 -c -f c:currency_format1.fmt -T'

    使用xml格式的格式文件

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:currency1.txt -F 10 -L 13 -c -x -f c:currency_format2.fmt -T'

    总结

    BCP命令是SQL Server提供的一个快捷的数据导入导出工具。使用它不需要启动任何图形管理工具就能以高效的方式导入导出数据。当然,它也可以通过xp_cmdshell在SQL语句中执行,通过这种方式可以将其放到客户端程序中(如delphi、c#等)运行,这也是使客户端程序具有数据导入导出功能的方法之一。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。