文章目录

  • 安装bcp
    • Windows
  • bcp说明
  • 具体示例

bcp(bulk copy program utility)是是用于在SQL Server中间复制大量数据的一个工具。

安装bcp

默认情况下是没有该工具的,所以需要单独安装。安装非常简单,windows直接下一步就可以里。Linux也就是解压,然后配置环境变量即可。下面简单说明一下安装方法。

Windows

首先根据操作系统版本下载对应的bcp安装包
64位:
https://download.microsoft.com/download/4/C/C/4CC1A229-3C56-4A7F-A3BA-F903C73E5895/EN/x64/MsSqlCmdLnUtils.msi
32位:
https://download.microsoft.com/download/4/C/C/4CC1A229-3C56-4A7F-A3BA-F903C73E5895/EN/x86/MsSqlCmdLnUtils.msi
直接双击安装即可。

###Linux

  • 下载yum配置文件
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo
  • 安装
    bash yum install mssql-tools unixODBC-devel
    如果有老版本的bcp工具,请先卸载
    bash yum remove mssql-tools unixODBC-utf16-devel
  • 配置环境变量
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

其他操作系统安装方法,请查看官方文档:
https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-tools?view=sql-server-2017

bcp说明

语法:

[root@sqlserver ~]# bcp
usage: bcp {dbtable | query} {in | out | queryout | format} datafile[-m maxerrors]            [-f formatfile]          [-e errfile][-F firstrow]             [-L lastrow]             [-b batchsize][-n native type]          [-c character type]      [-w wide character type][-N keep non-text native] [-q quoted identifier][-t field terminator]     [-r row terminator][-a packetsize]           [-K application intent][-S server name or DSN if -D provided]             [-D treat -S as DSN][-U username]             [-P password][-T trusted connection]   [-v version]             [-R regional enable][-k keep null values]     [-E keep identity values][-h "load hints"]         [-d database name]

参数说明:

  • datafile:需要指定完整的路径。将数据批量导入 SQL Server时,数据文件将包含要复制到指定的表或
    视图中的数据。 从 SQL Server中批量导出数据时,数据文件将包含从表或视图中复制的数据。

  • in 从文件复制到数据库表或视图。

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

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

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

  • " query " 是一个返回结果集的 Transact-SQL 查询。 如果该查询返回多个结果集,则只将第一个结果集复制到数据文件,而忽略其余的结果集。 将查询用双引号括起来,将查询中嵌入的任何内容用单引号括起来。 从查询大容量复制数据时,也必须指定queryout 。

  • -e err_文件
    指定错误文件的完整路径,此文件用于存储 bcp 实用工具无法从文件传输到数据库的所有行。 bcp 命令产生的错误消息将被发送到用户的工作站。 如果不使用此选项,则不会创建错误文件。
    如果 err_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -e 与 err_file 值之间包含空格。

  • -F first_row
    指定要从表中导出或从数据文件导入的第一行的编号。 此参数的值应大于 (>) 0,小于 (<) 或等于 (=) 总行数。 如果未指定此参数,则默认为文件的第一行。
    first_row 可以是一个最大为 2^63-1 的正整数值。 -F first_row 的值从 1 开始。

  • -L last_row
    指定要从表中导出或从数据文件中导入的最后一行的编号。 此参数的值应大于 (>) 0,小于 (<) 或等于 (=) 最后一行的编号。 如果未指定此参数,则默认为文件的最后一行。
    last_row 可以是一个最大为 2^63-1 的正整数值。

  • -m max_errors
    指定取消 bcp 操作之前可能出现的语法错误的最大数目。 语法错误是指将数据转换为目标数据类型时的错误。 max_errors 总数不包括只能在服务器中检测到的错误,如约束冲突。

具体示例

创建一个空表StockItemTransactions_bcp用于后面导入测试,导出的数据文件是普通文本文件,所以数据文件不受操作系统限制,可以导入到Linux上的SQL Server中。

USE WideWorldImporters;
GO  SET NOCOUNT ON;IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Warehouse.StockItemTransactions_bcp')
BEGINSELECT * INTO WideWorldImporters.Warehouse.StockItemTransactions_bcpFROM WideWorldImporters.Warehouse.StockItemTransactions  WHERE 1 = 2;  ALTER TABLE Warehouse.StockItemTransactions_bcp ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp PRIMARY KEY NONCLUSTERED (StockItemTransactionID ASC);
END

A.将表数据复制到数据文件中(操作系统认证)
将数据库WideWorldImporters中用户Warehouse下的表StockItemTransactions复制到数据文件StockItemTransactions_character.bcp中

C:\Users\Administrator>bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\BCP\StockItemTransactions_character.bcp -c -T开始复制...
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Warning: BCP import with a format file will convert empty strings in delimited columns to NULL.
1000 rows successfully bulk-copied to host-file. Total received: 1000
1000 rows successfully bulk-copied to host-file. Total received: 2000
1000 rows successfully bulk-copied to host-file. Total received: 3000
1000 rows successfully bulk-copied to host-file. Total received: 4000
1000 rows successfully bulk-copied to host-file. Total received: 5000
略。。。
1000 rows successfully bulk-copied to host-file. Total received: 235000
1000 rows successfully bulk-copied to host-file. Total received: 236000已复制 236667 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒)     : 1359   平均值: (每秒 174147.91 行。)

扩展语法:指定最大语法错误数、一个错误文件和一个输出文件。那么屏幕上就不会打印输出信息了。

bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\BCP\StockItemTransactions_native.bcp -m 1 -n -e D:\BCP\Error_out.log -o D:\BCP\Output_out.log -S -T

B将表数据复制到数据文件中(用户/密码)
通过指定用户名和密码来连接数据库并复制表的数据。

C:\Users\Administrator>bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\BCP\StockItemTransactions_character.bcp -c -U sa -S 127.0.0.1 --如果需要指定实例名则IP/实例名
密码:开始复制...
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Warning: BCP import with a format file will convert empty strings in delimited columns to NULL.
略。。。
1000 rows successfully bulk-copied to host-file. Total received: 236000已复制 236667 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒)     : 1391   平均值: (每秒 170141.63 行。)

C.将数据文件中的数据复制到表中
上面几个例子是将数据复制到数据文件中,下面将数据从数据文件中复制到表StockItemTransactions_bcp中。

C:\Users\Administrator>bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\BCP\StockItemTransactions_character.bcp -c -T开始复制...
1000 rows sent to SQL Server. Total sent: 1000
1000 rows sent to SQL Server. Total sent: 2000
略。。。
1000 rows sent to SQL Server. Total sent: 235000
1000 rows sent to SQL Server. Total sent: 236000已复制 236667 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒)     : 2203   平均值: (每秒 107429.41 行。)

查看数据是否正确导入:

SELECT TOP (10) *FROM [WideWorldImporters].[Warehouse].[StockItemTransactions_bcp]

扩展语法:使用提示 TABLOCK,指定最大语法错误数、一个错误文件和一个输出文件。

bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\BCP\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\BCP\Error_in.log -o D:\BCP\Output_in.log -S -T

D.将指定的列复制到数据文件中
只复制指定的行到数据文件中,若要复制特定列,可以使用 queryout 选项。

C:\Users\Administrator>bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\BCP\StockItemTransactionID_c.bcp -c -T开始复制...
1000 rows successfully bulk-copied to host-file. Total received: 1000
1000 rows successfully bulk-copied to host-file. Total received: 2000
1000 rows successfully bulk-copied to host-file. Total received: 3000
1000 rows successfully bulk-copied to host-file. Total received: 4000
略。。。
1000 rows successfully bulk-copied to host-file. Total received: 236000已复制 236667 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒)     : 297    平均值: (每秒 796858.56 行。)

E.将指定的行复制到数据文件中
同样可以通过条件只复制指定的行。

C:\Users\Administrator>bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\BCP\Amy_Trefl_c.bcp -d WideWorldImporters -c -T开始复制...
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Warning: BCP import with a format file will convert empty strings in delimited columns to NULL.已复制 1 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒)     : 15     平均值: (每秒 66.67 行。)

SQL Server工具--bcp介绍与使用相关推荐

  1. sql server的BCP导入导出(转)

    文章分类:数据库 sql server的BCP导入导出 bcp命令是SQL Server提供的一个快捷的数据导入导出工具.使用它不需要启动任何图形管理工具就能以高效的方式导入导出数据.bcp是SQL ...

  2. oracle bcp out,SQL Server利用bcp命令把SQL语句结果生成文本文件

    这篇文章主要为大家详细介绍了SQL Server利用bcp命令把SQL语句结果生成文本文件,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!在SQL ...

  3. SQL Server的bcp命令

    官网: https://docs.microsoft.com/zh-cn/sql/tools/bcp-utility?view=sql-server-2017 bcp  实用工具可以在 Microso ...

  4. Microsoft Dynamics server 2015 所有的SQL server 2012 视图 介绍及功能

    微软Dynamics 2015 所有的SQL server 2012 视图 介绍及功能 此文章中SQL Server 视图可以为开发者提供帮助,以下部分摘自微软CRM官方安装文件中. Microsof ...

  5. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  6. sql server 系统表 介绍

    sysaltfiles  主数据库 保存数据库的文件 syscharsets  主数据库字符集与排序顺序 sysconfigures 主数据库 配置选项 syscurconfigs 主数据库当前配置选 ...

  7. apex版本控制_适用于数据库开发和管理的优秀SQL Server工具

    对于SQL数据库开发者和数据库管理员(DBA)们来说,必须要有趁手的SQL工具,不仅可以大大减少功能的开发时间,而且对于DBA来说,拥有监控工具也很重要. 今天一起看看适用于SQL Server开发和 ...

  8. 如何把Access转成SQL Server的方法介绍

    1.打开"控制面板"下"管理工具"中的"数据库源". 2.按"添加"添加一个新的数据源,在选择栏里选"Driv ...

  9. sql server注入_SQL注入:SQL Server中的介绍和预防方法

    sql server注入 A SQL injection attack is one of the most commonly used hacking techniques. It allows h ...

最新文章

  1. Spring JdbcTemplate的queryForList(String sql , ClassT elementType)易错使用--转载
  2. Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)
  3. CentOS firewall添加开放端口
  4. java包含点_Java的21个核心技术点,你知道吗
  5. 带你玩转Pandas
  6. 程序员被公司开除,隔阵子领导命令回前公司讲解代码,网友直呼:关我嘛事?
  7. python基础一 day17 二分查找算法
  8. [转]Linux内核基础与常用命令总结
  9. HTML中行内元素与块级元素的区别:
  10. html如何添加阿里图标,CSS引入阿里iconfont图标步骤
  11. 体验为王-2021友盟+移动性能优化比赛第一名作品
  12. 淘宝API 拍立淘图片搜索接口
  13. 【学习笔记】移动无线信道理论
  14. 设计模式之面向对象七大基本原则
  15. 云原生API网关 - 开源项目Hango网关设计与实践
  16. byte[]数组转String中文乱码
  17. 怎么看cudnn的版本好_婴儿生长曲线怎么看、是不是越胖越好
  18. Redis开发设计规范及案例分析
  19. 怎么用PS做出划痕的效果?
  20. C语言使用CUDA中cufft函数做GPU加速FFT运算,与调用fftw函数的FFT做运算速度对比

热门文章

  1. java光照补偿_十、长时间曝光(转自 色影无忌)
  2. 中国供应平台API,item_search - 按关键字搜索china商品
  3. 嵌入式Qt开发之环境配置
  4. 【Redis】Nosql引入、Redis的数据类型和常用指令
  5. 用g.drawString比较大小
  6. Java数据结构——数组实现栈
  7. JWT与Signature
  8. 徽章系列2:JitPack 的使用
  9. JCF——Java工具类使用
  10. iOS单元测试:Specta + Expecta + OCMock + OHHTTPStubs + KIF