Я пытаюсь загрузить большие данные суммы в SQL-сервере от плоского файла с помощью BULK INSERT. Однако мой файл имеет переменное число столбцов, например, первая строка содержит 14, и второе содержит 4. Это в порядке, я просто хочу сделать таблицу с макс. числом столбцов и загрузить файл в него с ПУСТЫМИ УКАЗАТЕЛЯМИ для недостающих столбцов. Я могу играть с ним от той точки. Но кажется, что SQL Server, при достижении конца строки и наличии большего количества столбцов для заполнения для той же самой строки в конечной таблице, просто идет дальше к следующей строке и пытается поместить данные по той строке к неправильному столбцу таблицы.
Существует ли способ получить поведение, которое я ищу? Существует ли опция, которую я могу использовать для определения этого? Кто-либо столкнулся с этим прежде?
Вот код
BULK INSERT #t
FROM '<path to file>'
WITH
(
DATAFILETYPE = 'char',
KEEPNULLS,
FIELDTERMINATOR = '#'
)
BULK INSERT не особо гибок. Один из способов - загрузить каждую строку данных во временную таблицу, содержащую один большой столбец varchar. После загрузки вы затем анализируете каждую строку, используя свои собственные процедуры.
Попробуйте указать терминатор ROW вместе с указателем конца поля.
BULK INSERT #t
FROM '<path to file>'
WITH
(
DATAFILETYPE = 'char',
KEEPNULLS,
FIELDTERMINATOR = '#',
ROWTERMINATOR = '\n' --Or whatever signifies the end of a row in your flatfile.
)
Дополнительную информацию об этом можно найти здесь:
Различное количество столбцов означает, что он не может быть проанализирован код массовой вставки. Как узнать правильное количество столбцов? Что, если вы предоставите слишком много?
Вам придется загрузить его в таблицу с 4 столбцами, а затем разделить остальные (или один большой столбец) Или предварительно обработать его, чтобы сгенерировать равный Число столбцов.