Используйте файл формата для описания вашего файла на sql сервере. Это xml или собственный отформатированный файл, который сообщает sql серверу, как сопоставить столбцы в файле со столбцами в вашей таблице
Подробное объяснение можно найти в прекрасном руководстве
Общий процесс:
- иметь таблицу со столбцами различных типов данных
- создать файл формата, описывающий csv, ширину полей, терминаторы et c, и сопоставляет поля со столбцами (следовательно, поддерживает поля и столбцы, которые не в том же порядке)
- запускает импорт с использованием файла формата
Вот точный MSDN :
Создать таблицу:
CREATE TABLE dbo.Person (
PersonID smallint,
FirstName varchar(25),
LastName varchar(30),
BirthDate Date
);
Создать CSV (c: \ temp \ my.csv):
1,Anthony,Grosse,1980-02-23
2,Alica,Fatnowna,1963-11-14
3,Stella,Rosenhain,1992-03-02
Создать файл формата ( c: temp \ format. xml):
<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="11"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="FirstName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="3" NAME="LastName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="4" NAME="BirthDate" xsi:type="SQLDATE"/>
</ROW>
</BCPFORMAT>
Импорт данных из CSV со ссылкой на файл формата:
BULK INSERT dbo.Person
FROM 'c:\temp\my.csv'
WITH (FORMATFILE = 'c:\temp\format.xml');
GO