2009-07-08 2 views
0

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

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

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

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

+0

SQL Server Предполагаю ... 2005 или 2008? – gbn

+0

Да, извините SQL Server 2005. Мы действительно запускаем это на Developer and Enterprise Edition до сих пор без проблем. Машина, на которой мы видим проблему, на самом деле работает Standard Edition. Я не уверен, что это способствует этому вопросу или нет. –

ответ

0

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

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 и загрузить параллельно, но это немного выходит за рамки этого вопроса. :)