BCP - входной терминатор в вставке данных - PullRequest
1 голос
/ 14 марта 2019

Я использую BCP для загрузки файла json в SQL Server (да, я знаю, что есть более эффективные способы, но нужно попробовать это)

Проблема в том, что документ json сформирован неправильно, потому чтотерминатор в файле формата удаляется, но я хочу, чтобы он включал

bcp db.dbo.test IN G:\JSON\json.out  -f G:\JSON\formatfile.out -T

терминатор файла формата:

  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="] }" COLLATION="Latin1_General_CI_AI"/>

Как можно завершить файл без усечения закрывающих тегов json?

Ответы [ 2 ]

1 голос
/ 14 марта 2019

BCP не предназначен для импорта файла в один столбец, поэтому вы сталкиваетесь с этими проблемами.Чтобы импортировать файл как отдельный объект, используйте функцию OPENROWSET (... SINGLE_BLOB), например:

INSERT INTO JsonTable(jsonColumn)
SELECT BulkColumn
FROM OPENROWSET (BULK ‘TextFile Path’, SINGLE_BLOB) FileName
0 голосов
/ 15 марта 2019

Если вам абсолютно необходимо использовать BCP, есть один прием, который часто используется для файлов XML, который также должен работать и для файлов JSON.

  1. Не добавлять значение терминатора строки
  2. Сделайте ваше значение терминатора поля чем-то, что абсолютно, положительно, не может существовать в файле JSON, например '\ 0 ~ \ 0 \ 0 ~' (который равен NULL + ~ + два NULL + ~).Если это может существовать в JSON, попробуйте другое значение.Просто убедитесь, что он не может существовать в файле.

По умолчанию это импортирует весь XML-файл как единое целое.Он должен работать и с файлами JSON, но я не могу этого гарантировать.

...