Sqlserver BCP参数解释和字符格式选择和故障处理小结

在这里插入图片描述
官方文档https://docs.microsoft.com/zh-cn/sql/tools/bcp-utility?view=sql-server-2017

SET OUT_SQLSERVER=-S 192.168.132.63 -U sa -P sccs123
bcp FDC.DBO.tb_First_Five_QC out tb_First_Five_QC.txt -w -k -C 65001 %OUT_SQLSERVER%
以上如果把脚本存成文件名bcp.bat或没有-c或-w,则运行的时候一直刷屏这两行数据。却压根不执行,因为存成文件名bcp.bat与真实的bcp命令相冲突,只要改成其他名字如bcp1.bat并加上-c或-w

-C后面指定字符集,如65001表示UTF-8

-w是单独存在且必须存在的,不是说-w后面就是接%变量%,一般使用-w,较少用-c

-F 后面接数字指定从被导出表的哪一行导出,或从被导入文件的哪一行导入

-L 后面接数字
指定被导出表要导到哪一行结束,或从被导入文件导数据时,导到哪一行结束

-c
使用Char类型做为存储类型,没有前缀且以"\t"做为字段分割符,以"\n"做为行分割符

-w
和-c类似,只是当使用Unicode字符集拷贝数据时使用,且以nChar做为存储类型

-b 后面接数字
表示bcp in导入时,每多少行就提交
指定每批导入数据的行数。 每个批次均作为一个单独的事务进行导入并记录,在提交之前会导入整批。 默认情况下,数据文件中的所有行均作为一个批次导入。 若要将行分为多个批次进行操作,请指定小于数据文件中的行数的 batch_size 。 如果任何批次的事务失败,则将只回滚当前批次中的插入。 已经由已提交事务导入的批次不会受到将来失败的影响。

实验经历:1亿行的表,表容量是200GB,每1万行就提交,bcp in时该数据库的恢复模式是full,没有其他任何会话,只有这个一个bcp in的会话,导入5千万行时,该数据库日志已经达到260GB了且不可收缩。这里要理解一个问题,这个日志的增大和-b提交与否无关,因为日志Full模式的旧称叫”Checkpoint without truncate log“,也就是SQL Server的Checkpoint不主动截断log,只有备份log之后,才可以截断log,否则log文件会一直增大,直到撑爆硬盘

-n
使用数据的本机(数据库)数据类型执行大容量复制操作。 此选项不提示输入每个字段,它将使用本机值。

-N
执行大容量复制操作时,对非字符数据使用本机(数据库)数据类型的数据,对字符数据使用 Unicode 字符。 此选项是 -w 选项的一个替代选项,并具有更高的性能。此选项主要用于通过数据文件将数据从 SQL Server 的一个实例传送到另一个实例。 此选项不提示输入每个字段。 如果要传送包含 ANSI 扩展字符的数据,并希望利用本机模式的性能优势,则可使用此选项。

通过使用 bcp.exe 和 -N来导出数据后又将数据导入到同一表架构时,如果存在固定长度的非 Unicode 字符列(例如 char(10) ),系统可能会显示截断警告。
解决此警告的一个方法是使用 -n 来替代 -N。

(管理员/用户)应尽可能使用本机格式 (-n) 以避免分隔符问题。 使用本机格式可以使用 SQL Server进行导出和导入。 如果数据将导入到非 SQL Server 数据库,则使用 -c 或 -w 选项从SQL Server 导出数据。

如果实例名称带了斜杠,比如select @@servername,SERVERPROPERTY(‘machinename’)显示为wodb\prod和DBPROD1,则-S时不能使用wodb\prod而要使用DBPROD1\prod或localhost\prod,因为-S [server_name[\instance_name]

bcp "select * from RayHistory.dbo.RAY_FinalEpsFCHistory where KaTeX parse error: Undefined control sequence: \BCP at position 46: …=1" queryout L:\̲B̲C̲P̲\RAY_FinalEpsFC…PARTITION.FNDate’
解决方法:分区表需要在分区前面加上数据库名称
替换 P A R T I T I O N . F N D a t e ( S n a p s h o t D a t e ) 为 R a y H i s t o r y . PARTITION.FNDate(SnapshotDate)为RayHistory. PARTITION.FNDate(SnapshotDate)RayHistory.PARTITION.FNDate(SnapshotDate)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BCP(Bulk Copy Program)是Microsoft SQL Server提供的一个命令行实用工具,用于高效地将大量数据导入和导出数据库表。下面是BCP命令的常用参数说明: ``` bcp [数据库名].[模式名].[表名] {in | out} [文件路径] -S [服务器名] -U [用户名] -P [密码] [-d 数据库名] [-T] [-c | -n | -w] [-t 列分隔符] [-r 行分隔符] [-e 错误文件路径] [-F 第一行标志] [-L 最后一行标志] [-k 保留空字符] ``` - `[数据库名].[模式名].[表名]`: 指定要导入或导出数据的数据库、模式和表名。 - `{in | out}`: 指定是导入数据(in)还是导出数据(out)。 - `[文件路径]`: 指定导入或导出数据的文件路径和文件名。 - `-S [服务器名]`: 指定连接的SQL Server实例名称。 - `-U [用户名] -P [密码]`: 指定连接SQL Server实例所使用的用户名和密码。或者使用 `-T` 参数,使用Windows身份验证登录。 以下是一些其他常用的BCP参数: - `-d 数据库名`: 指定要连接的数据库名称。 - `-c`: 使用字符模式,导入导出数据时将数据视为字符。 - `-n`: 使用本机模式,导入导出数据时保持数据的原始二进制格式。 - `-w`: 使用宽字符模式,导入导出数据时将数据视为Unicode字符。 - `-t 列分隔符`: 指定列之间的分隔符。默认为制表符。 - `-r 行分隔符`: 指定行之间的分隔符。默认为换行符。 - `-e 错误文件路径`: 指定错误记录的文件路径和文件名。 - `-F 第一行标志`: 指定第一行数据的标志。 - `-L 最后一行标志`: 指定最后一行数据的标志。 - `-k`: 保留空字符,将空字符串视为有效值。 请注意,BCP命令还有其他可用的参数和选项,可以根据实际需求进行调整和使用。可以通过运行 `bcp /?` 命令在命令提示符或终端中查看完整的BCP命令参数列表和说明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值