Массовая вставка двоичных типов SQL Server 2005 - PullRequest
2 голосов
/ 14 января 2010

У меня есть таблица в следующем формате:

smallint, binary(10), smallint, smallint, varbinary(max)

У меня также есть файл csv, сгенерированный из данных в таблице одним из наших процессов, где двоичные данные экспортируются как шестнадцатеричные данные.
Я попытался сгенерировать операторы INSERT INTO, которые работали, но были очень медленными.
Я устал BULK INSERT, но он терпит неудачу, и я подозреваю, что это из-за двоичных данных.

Кто-нибудь знает, как я могу использовать BULK INSERT (или что-то в этом роде) для вставки большого количества данных, включая двоичные данные?

Пример данных:

1,0x00000000000000000BB8,0,142,0x434F4E534E554D424552202020202020040006000600202000000000202000000000000000008000422020202020202020202020202020202020000000000000000000000000000000000000202000000020000000000000000000000000000000000000000000000000000000000200020000000000000004000000E09304006B8016000600FFFFFFFF0B00010007004633303030002E81FFFF1C00FFFFFFFF04001E00

Спасибо.

1 Ответ

5 голосов
/ 16 января 2010

Бьюсь об заклад, проблема в том, что 0x434F4E ... обрабатывается как фактические байты для вставки (0x3078343334463445), а не как шестнадцатеричное расширение. ('0' = 0x30, 'x' = 0x78, '4' = 0x34 и т. Д.) Усечение может произойти, потому что в шестнадцатеричном формате есть два символа на значение, поэтому он пытается вставить строку, вдвое длиннее той, которую вы хотят.

Если вы посмотрите на опции BULK INSERT и не найдете способа интерпретировать hex как двоичный файл, я рекомендую использовать для этого SSIS. У меня нет реального опыта массовой загрузки двоичных значений из SSIS, но, несомненно, он может это сделать, и это будет быстро.

Я думаю, что всегда есть возможность вывести фактические байты двоичных значений, а не шестнадцатеричное их представление, но вы столкнетесь с проблемами, если будете использовать разделитель, поскольку разделитель может быть одним из байты в двоичном значении. Это как раз проблема смешивания текстовых и двоичных данных. Вы могли бы сделать это, используя импорт столбцов фиксированной длины со специальным расширенным синтаксисом для BULK INSERT, который определяет столбцы и их типы данных.

...