Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Bulk Insert без разделителя


Автор: helflip 6.5.2011, 13:26
Всем привет.

Помогите с запросом пожалуйста, с bulk никогда не работал не могу сообразить что то как сделать инсерт с ограничением длины поля.

Сама задача:
Необходимо в MSSQL загрузить в таблицу файл с данными (данные без разделителей) с помощью bulk insert

Пример таблицы:
Код

CREATE TABLE TTT
        (
        F1 varchar(255) NOT NULL,
        F2 varchar(255) NOT NULL,
        F3 varchar(255) NOT NULL,
        F4 varchar(255) NOT NULL,
        F5 varchar(255) NOT NULL
        )


Формат длин полей в файле:
F1        3
F2        5
F3        7
F4        4
F5        2

Для примера, содержимое входного файла:
123 12345 1234567 1234 12 321 54321 7654321 4321 21 123 123451234567123412 


то есть данные в табличке должны выглядеть следующим образом:
F1      F2         F3            F4       F5
123    12345  1234567  1234   12
321    54321  7654321  4321   21
123    12345  1234567  1234   12 


Заранее спасибо.

Автор: helflip 9.5.2011, 15:16
Ребят, намекните как решать данную задачу. Куда смотреть.

Спасибо.

Автор: helflip 11.5.2011, 07:55
Пришел к решению сам.

Инсерт делается через форматный файл.
кому интересно вот что сделал:

Сам запрос
Код

use my_db

Bulk Insert TTT From 'C:\datafile.txt'
With (FORMATFILE = 'C:\MyFormatFile.xml')

select * from ttt
GO



файл datafile.txt
123123451234567123412321543217654321432121123123451234567123412

файл MyFormatFile.xml
Код

<?xml version="1.0" ?>
- <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <RECORD>
<FIELD xsi:type="CharFixed" ID="1" LENGTH="3" />
<FIELD xsi:type="CharFixed" ID="2" LENGTH="5" />
<FIELD xsi:type="CharFixed" ID="3" LENGTH="7" />
<FIELD xsi:type="CharFixed" ID="4" LENGTH="4" />
<FIELD xsi:type="CharFixed" ID="5" LENGTH="2" />
</RECORD>
- <ROW>
<COLUMN SOURCE="1" NAME="F1" xsi:type="SQLSMALLINT" />
<COLUMN SOURCE="2" NAME="F2" xsi:type="SQLNVARCHAR" />
<COLUMN SOURCE="3" NAME="F3" xsi:type="SQLNVARCHAR" />
<COLUMN SOURCE="4" NAME="F4" xsi:type="SQLNVARCHAR" />
<COLUMN SOURCE="5" NAME="F5" xsi:type="SQLNVARCHAR" />
</ROW>
</BCPFORMAT>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)