Как получить максимальную длину полей в огромном файле с разделителями каналов

У меня есть файл с разделителями вертикальной черты, который слишком велик для открытия в Excel. Я пытаюсь импортировать этот файл в MSSQL с помощью мастера импорта в SSMS.

Обычно, когда я это делаю, я открываю файл в Excel и использую функцию массива =MAX(LEN(An:Annnn)) для получения максимальной длины каждого столбца. Затем я использую это, чтобы указать размер каждого поля в моей таблице.

Этот файл слишком велик, чтобы его можно было открыть в Excel, и SQL не проверяет все данные, чтобы дать точное предложение (я думаю, что это сумасшедшая маленькая выборка, например, 200 записей).

У кого-нибудь есть решение этой проблемы (я не против сделать что-то в Linux, особенно если это бесплатно).

Заранее благодарю за любую помощь.


person user1038638    schedule 06.07.2013    source источник
comment
Создайте временную таблицу со столбцами, установленными на максимально возможный размер для каждого столбца и его тип данных. Импортируйте в это, а затем вы можете выполнить фактический импорт из этой временной таблицы.   -  person Ken White    schedule 06.07.2013


Ответы (1)


Когда я импортирую текстовые данные в базу данных, обычно я сначала читаю данные в промежуточную таблицу, где столбцы представляют собой достаточно длинные символьные поля (скажем, varchar(8000)).

Затем я загружаю из промежуточной таблицы в финальную таблицу:

create table RealTable (
    RealTableId int identity(1, 1) primary key,
    Column1 int,
    Column2 datetime,
    Column3 varchar(12),
    . . .
);

insert into RealTable(<all columns but id>)
    select (case when column1 not like '[^0-9]' then cast(column1 as int) end),
           (case when isdate(column2) = 1 then cast(column2 as datetime),
           . . .

Я считаю, что гораздо проще отлаживать проблемы с типами внутри базы данных, чем при вставке в базу данных.

person Gordon Linoff    schedule 06.07.2013
comment
Извините за задержку с ответом. Я только что понял, что не ответил. В итоге я добавил инструмент под названием FileQuery в свой набор инструментов. Это позволяет мне открывать очень большие текстовые файлы и фактически выполнять некоторые базовые аналитические запросы к текстовому файлу. Спасибо за идеи! - person user1038638; 07.01.2017