博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bcp命令有许多参数
阅读量:5020 次
发布时间:2019-06-12

本文共 3107 字,大约阅读时间需要 10 分钟。

bcp命令有许多参数,下面给出bcp命令参数的简要解析

用法: bcp {dbtable | query} {in | out | queryout | format} 数据文件 [-m 最大错误数] [-f 格式化文件] [-e 错误文件] [-F 首行] [-L 末行] [-b 批大小] [-n 本机类型] [-c 字符类型] [-w 宽字符类型] [-N 将非文本保持为本机类型] [-V 文件格式版本] [-q 带引号的标识符] [-C 代码页说明符] [-t 字段终止符] [-r 行终止符]  [-i 输入文件]  [-o 输出文件]  [-a 数据包大小] [-S 服务器名称]  [-U 用户名]     [-P 密码]  [-T 可信连接]   [-v 版本] [-R 允许使用区域设置] [-k 保留空值] [-E 保留标识值] [-h"加载提示"] [-x 生成xml 格式化文件]

其中最常用的已经用粉红色字体标注。

2.bcp命令实例

这里我们以AdventureWorks样例数据库为例进行实验。

2.1.将表中数据导出到一个文件中(使用可信连接)

bcp AdventureWorks.Sales.Currency out c:\Currency.dat -T -c

上面的参数 out 表示输出文件,c:\Currency.dat是文件名和路径,-T表示可信连接,这个跟sqlcmd有点不同,在sqlcmd中使用-E表示可信连接。-c表示以字符形式输出,如果使用-w的话,输出内容相同,但是输出文件的大小将增加一倍。

如果你要将导出的Currency.dat文件导入到非sql server数据库中,那么使用-w比较好。

2.2.将表中数据导出到一个文件中(使用混合模式身份验证)

bcp AdventureWorks.Sales.Currency out c:\Currency.dat -c -Usa -Psa12345 -S.

这个数据导出语句与前面的不同之处是,前面使用可信连接,也就是windows验证,不需要输入用户名和密码。而此时使用的是sql server 验证方式,所以得输入sql server数据库用户名与密码。这里-S表示要连接的数据源,我这里-S.表示连接本地的默认实例,

如果不加-S这个参数也会连接到默认实例中,如果要连接命名实例的话,可以使用参数:-S<server_name\instance_name>

2.3.将文件中的数据导入到表中

在中提到:

如果使用 bcp 备份数据,请创建一个格式化文件来记录数据格式。 bcp 数据文件不包括任何架构或格式信息,因此如果已删除表或视图并且不具备格式化文件,则可能无法导入数据。”

这句话的意思是,假如你要使用bcp来备份数据的话,那么最好也将数据的表结构也跟数据一起导出来。这样的话即使表被删除了,也可以通过先创建表,然后再使用bcp导入数据的方法进行还原。但是如果你只是用bcp备份数据,而没有备份表结构,那么当表被删除以后,你将无法使用bcp导入数据。

更深层的意思就是,如果你要使用bcp导入数据,那么必须有表结构。这个类似于insert into select的复制操作,因为它也需要先创建好表,然后再进行数据备份。具体可以参考:。

所以假如我们要将前面导出的Currency.dat导入到数据库中,那么数据库中必须有对应的一张表,我们这里创建一张叫做Sales.Currency2的空表,sql语句如下: 

USE AdventureWorks; GO SELECT * INTO Sales.Currency2 FROM AdventureWorks.Sales.Currency WHERE 1=2;--只创建表结构而不会插入数据

在创建好表结构以后,就可以将本地文件中的数据导入到数据库表中,导入的bcp命令如下:

bcp AdventureWorks.Sales.Currency2 in c:\Currency.dat -T -c

2.4.bcp中使用queryout关键词

如果要根据某种条件来导出数据的话,可以使用queryout关键字。

2.4.1.将特定的列复制到数据文件中

bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout c:\Currency.Name.dat -T -c

2.4.2.将特定的行复制到数据文件中

bcp "select * from AdventureWorks.Sales.Currency where CurrencyCode='AED' and Name='Emirati Dirham'" queryout c:\Currency3.dat -T -c

3.大数据量的批量导入

bcp本身就可应用于大数据量的批量导入,不过他是命令行形式,如果要使用sql命令进行大数据量的批量导入,可以使用bulk insert,这个在之前的一篇博客中有提到,并进行了实验,可以参考:。

另外还找了一篇博客,里面列出了bulk insert和bcp的批量导入方式,详细请参考:。

bcp并不只是只能在cmd命令行中执行,也可以在sql查询语句中执行,不过这需要调用一个存储过程。比如前面的将数据库表的数据导出到一个文件中,可以在SSMS中执行如下sql语句

exec master..xp_cmdshell 'bcp AdventureWorks.Sales.Currency out c:\Currency.dat -T -c'

假如你在执行上述语句的时候报如下错误:

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.

你可以通过执行如下语句来解决问题:参考:

-- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- To update the currently configured value for advanced options. RECONFIGURE GO -- To enable the feature. EXEC sp_configure 'xp_cmdshell', 1 GO -- To update the currently configured value for this feature. RECONFIGURE GO
 

转载于:https://www.cnblogs.com/forint/p/4123672.html

你可能感兴趣的文章
The Ctrl & CapsLock `problem'
查看>>
Makefile ===> Makefile 快速学习
查看>>
cmake使用
查看>>
Bitwise And Queries
查看>>
Amd,Cmd, Commonjs, ES6 import/export的异同点
查看>>
bzoj 4180: 字符串计数
查看>>
Java重写《C经典100题》 --27
查看>>
【C++】单例模式详解
查看>>
文本框根据关键字异步搜索内容
查看>>
SQLServer 基本语法
查看>>
python模块之multiprocessing模块, threading模块, concurrent.futures模块
查看>>
PHP 的 HMAC_SHA1算法 实现
查看>>
深入理解javascript原型和闭包_____全部
查看>>
2016年中国的SaaS服务商企业研究
查看>>
HTML5:离线存储(缓存机制)-IndexDB
查看>>
9-5
查看>>
Redis存储AccessToken
查看>>
Use commons-email-1.1.jar+activation.jar+mail.jar to send Email
查看>>
iOS 开发常见函数
查看>>
Android: NDK编程入门笔记
查看>>