BCP 基本操作
Bcp概述
Bcp用于Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据。使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导出到数据文件.
Ø 2. Bcp的常见参数
-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值插入,而不是这列的默认值。
Ø 3. 参考URL
https://blog.csdn.net/weixin_42126947/article/details/80513220
Ø 4. 导出文件
Generate .fmt 文件
bcp tablename format nul -f D:\t_user.fmt -c -S dbserver -U dbuserid -P dbpwd
bcp.exe "SELEC id,name FROM [dbo].[tablename]
WHERE SEQ >= 15000001 AND SEQ < 16000000 and SEQ IS NOT NULL order by SEQ"
queryout "1-1M_control_table.csv" -S dbserver -T -d SONORA -t"," -c -o "recon.log" -F1 -L1000
Ø 5. 导入文件
bcp tablename in D:\dd.DAT -f D:\ t_user.fmt -S dbserver -U dbuserid -P dbpwd
² 6. Bcp常见error
Ø 6.1. Error = [Microsoft][SQL Native Client]Unable to open BCP host data-file.
原因:用户对导入导出的文件夹没有足够的操作权限。
解决方案:给用户添加足够权限来操作相关文件。
Ø 6.2.
Error = [Microsoft][SQL Native Client]String data, right truncation
原因:字符串长度过长
解决方案:检查数据长度是否超过表格设置,或者是否有正确的行结束标志。
Ø 6.3. Error=The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.
原因:用户没有执行xp_cmdshell的权限
解决方案:直接给用户全部开通xp_cmdshell的权限可能会带来安全方面的隐患,使用本地账户代理执行的方法
A.EXEC sp_xp_cmdshell_proxy_account 'ACCOUNT', 'PWD';
B.create credential ##xp_cmdshell_proxy_account## with identity = 'ACCOUNT', secret = 'PWD'
C.GRANT EXECUTE ON sys.xp_cmdshell (存储过程) TO REALSQLACCOUNT(数据库用户)
请参考如何在不提升用户权限的情况下,使普通用户执行xp_cmdshell存储过程
Ø 6.4. SQLState = S1000, NativeError = 0Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file(unexpected eof encountered in BCp data-file)
确保非 XML 格式化文件以回车符/换行符结尾。

浙公网安备 33010602011771号