欢迎~

Hope is a good thing...Maybe the best of things. And no good thing ever dies..     
隐藏

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 格式化文件以回车符/换行符结尾。

posted @ 2021-07-15 14:07  Tuzi_ya  阅读(701)  评论(0)    收藏  举报