Невозможно обновить таблицу SQL Server с помощью утилиты BCP - PullRequest
0 голосов
/ 08 июля 2009

У нас есть таблица базы данных, которую мы предварительно заполняем данными в рамках нашей процедуры развертывания. Поскольку один из столбцов является двоичным (это двоичный сериализованный объект), мы используем BCP для копирования данных в таблицу.

До сих пор это работало очень хорошо, однако сегодня мы впервые попробовали эту технику на машине Windows Server 2008 и заметили, что не все столбцы обновляются. Из 31 rows, которые обычно вставляются как часть этой операции, только 2 rows действительно правильно заполнили binary columns. Остальные 29 строк просто имели нулевые значения для своих binary column. Это первая ситуация, когда мы столкнулись с подобной проблемой, и это тот же файл .dat, который мы используем для всех наших развертываний.

Кто-нибудь еще сталкивался с этой проблемой раньше или имел какое-либо понимание относительно того, что может быть проблема?

Заранее спасибо, Джереми

1 Ответ

0 голосов
/ 14 февраля 2014

Я предполагаю, что вы используете -c или -w для вывода в виде текста, и он задыхается от конкретной комбинации символов, которая ему не нравится, и вставляет в NULL. Это также может произойти в основном режиме, если нет файла формата. Попробуйте следующее и посмотрите, поможет ли это. (Очевидно, вам необходимо добавить сервер и параметры входа самостоятельно.)

bcp MyDatabase.dbo.MyTable format nul -f MyTable.fmt -n
bcp MyDatabase.dbo.MyTable out MyTable.dat -f MyTable.fmt -k -E -b 1000 -h "TABLOCK"

Это выведет данные таблицы в виде простого двоичного файла с файлом формата, NULL и значениями идентичности, чтобы абсолютно был уверен, что все выстроено в линию. Кроме того, он будет использовать 1000 пакетов для оптимизации дампа данных. Затем, чтобы вставить его обратно:

bcp MySecondData.dbo.MyTable in MyTable.dat -f MyTable.fmt -n -b 1000

... который будет использовать файл форматирования, файл данных и набор дозирования, чтобы немного увеличить скорость. Если вам нужна большая скорость, вам нужно взглянуть на BULK INSERT, FirstRow / LastRow и параллельную загрузку, но это немного выходит за рамки этого вопроса. :)

...