BCP -w复制0行而没有错误消息

时间:2019-03-01 08:36:09

标签: bcp

我正在尝试提取以下包含内容的.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') 我可以看到桌子上保留着尤尔根的口音。

但是当我尝试通过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。

db screenshot

根据一些建议,我将-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行而没有任何错误消息。 error message

有什么我想念的吗?我试图搜索其他地方,但找不到解决方案。我可以使用bcp -w bcp .txt文件吗?

=========================== 关于Pa1的建议,我在sql服务器中得到的信息如下:

Pa1 answer

与他的帖子略有不同,也许是因为sql版本?

我的Sql Server版本:

Microsoft SQL Server 2016(SP2)(X64)

===========

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

1 个答案:

答案 0 :(得分: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