【问题标题】:BCP -w copying 0 rows without error messageBCP -w 复制 0 行而没有错误消息
【发布时间】:2019-07-23 06:13:16
【问题描述】:

我正在尝试提取以下带有内容的 .txt 文件

2|Jürgen
3|Jürgen
4|Jürgen

| 分隔。第二列是重音字母,因为我想测试保留重音字母的sql表。

要摄取的sql表定义为

CREATE TABLE [stage].[bcp_test](
[ID] [int] NOT NULL,
[TERM] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CS_AS NOT NULL)

如果我做一个简单的插入,insert into stage.bcp_test values(1,'Jürgen') 我可以看到表中保留的 Jürgen 口音。

但是当我尝试通过 bcp 在示例文件中插入 3 行时

bcp stage.bcp_test in "test.txt" -S dbservername -c -t "|" -T -F 1 -b 20000 -m 1 -e error.txt

Jürgen 成为 J├╝rgen。

根据一些建议,我将 -c 更改为 -t。于是新的 bcp 命令就变成了

bcp stage.bcp_test in "test.txt" -S dbservername -w -t "|" -T -F 1 -b 20000 -m 1 -e error.txt

但是,0 行被复制而没有任何错误消息。

有什么我错过的吗?我试图搜索不同的地方,但找不到解决方案。我可以使用 bcp -w bcp 一个 .txt 文件吗?

============================ 关于 Pa1 的建议,我在我的 sql server 中得到的内容如下:

与他的帖子略有不同,可能是sql版本的原因?

我的 Sql 服务器版本:

Microsoft SQL Server 2016 (SP2) (X64)

============

补充:Pa1 的解决方案有效。取决于文件的编码方式。

【问题讨论】:

  • stackoverflow.com/questions/9220450/… 这里链接到一个非常古老的帖子,建议使用 bcp -w 来解决重音字母问题。但没有太多后续表明问题是否得到解决。
  • Pa1 的解决方案有效,无需使用 -w。但是我仍然对 -c 和 -w 这件事有点困惑。欢迎回答。

标签: bcp


【解决方案1】:

这似乎类似于character encoding issue with the BCP and ó

  1. -w 需要基于 bcp 文档的制表符分隔数据。所以用标签替换管道并尝试?

  2. 为确保正确插入文本,请尝试在 bcp 命令中指定 code page

-C { ACP | OEM | RAW | code_page }
  1. 如果您使用-C code_page 选项,则需要将code_page 与您尝试摄取的文件的编码相匹配。 完整列表可在here 获得

这是我系统上的试用版:

  • 对于 ANSI 文本
bcp stage.bcp_test in "test.txt" -S dbservername -c -C ACP -t "|" -T -F 1 -b 20000 -m 1 -e error.txt

Results before and after using ACP

  • 对于 UTF-8 编码的文本
bcp stage.bcp_test in "test.txt" -S dbservername -c -C 65001 -t "|" -T -F 1 -b 20000 -m 1 -e error.txt
  • 使用 -w(将文本更改为制表符)
bcp stage.bcp_test in "test.txt" -S dbservername -w -T -F 1 -b 20000 -m 1 -e error.txt

【讨论】:

  • 您好,感谢您的建议。使用 -c 确实有效。但是,前提是保留重音字母,而使用 -c 只是忽略了该要求。所以讨论还是用-w,unicode批量插入。在保留 -w 的同时,添加 -C ACP 并没有解决我的问题。
  • 接下来,哦,我明白你使用 -c -C ACP 的意义了。结果更好,但仍然略有偏差,即不保留确切的口音。我无法在此处附上图片。将在我的主要问题正文中提出结果。
  • 嗨@YanTianqi。我使用的示例文件使用的是 ANSI 编码。如果编码是 UTF-8,那么你是对的,它不会工作。对于 UTF-8,您需要指定 -C 65001。这可以解决问题吗?
  • 嗨 Pa1,太好了,通过使用 -c 65001,我设法保留了重音字母。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 2014-04-10
  • 2014-01-08
相关资源
最近更新 更多