BCP -w копирует 0 строк без сообщения об ошибке - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь получить следующий .txt файл с содержимым

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

, ограниченным |.2-й столбец - это буквы с акцентом, так как я хочу протестировать таблицу 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') Я вижу акцент, который Юрген сохранил в таблице.

Но когда я попытался вставить 3 строки в файл образца через bcp

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

Юрген становится Юргеном.

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

Есть что-то, что я пропустил?Я пытался искать в разных местах, но не могу найти решение.Можно ли мне скопировать файл .txt с помощью команды bcp -w?

========================== ОтносительноПредложение Pa1, что я получил на своем сервере sql, выглядит следующим образом:

Pa1 answer

Немного отличается от его поста, может быть, из-за версии sql?

My Sql Server Версия:

Microsoft SQL Server 2016 (SP2) (X64)

==========

Добавить в:Решение Pa1 работает.Зависит от того, как файл закодирован.

1 Ответ

0 голосов
/ 01 марта 2019

Это похоже на проблему кодировки символов в BCP, и -

  1. -w ожидает разделенных табуляцией данных на основе документации bcp.Так замените трубы на вкладку и попробуйте?

  2. Чтобы убедиться, что текст вставлен правильно, попробуйте указать кодовую страницу в своей команде bcp

-C { ACP | OEM | RAW | code_page }
Если вы используете опцию -C code_page, вам необходимо сопоставить кодовую страницу с кодировкой файла, который вы пытаетесь принять.Полный список доступен здесь

Вот пробная версия на моей системе:

  • Для текста ANSI
bcp stage.bcp_test in "test.txt" -S dbservername -c -C ACP -t "|" -T -F 1 -b 20000 -m 1 -e error.txt

Результаты до и после использования 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
...