Позвольте мне привести некоторые подробности, и тогда, я надеюсь, проблема прояснится. Данные ограничены знаком |. Причиной этого является то, что некоторые поля должны содержать запятые, и из-за этого csv сделает его слишком сложным.
Пример данных
12007|0|10|70|0|2017|1|1|Some County, Nevada|Total Covered|10 Total,all industries
12007|0|10|70|0|2017|2|1|Some County, Nevada|Total Covered|10 Total,all industries
Создать табличный скрипт
create table test (
area_fips varchar(5),
own_code varchar(1),
industry_code varchar(6),
agglvl_code varchar(6),
size_code varchar(2),
year varchar(50),
qtr varchar(50),
Disclosure_code varchar(50),
area_title varchar(50),
own_title varchar(50),
industry_title varchar(254)
);
Команда массовой вставки
bulk insert test
From 'Q:\folder\test1.txt'
WITH (firstrow=2,FORMATFILE='Q:\folder\xml1.xml',
ERRORFILE='Q:\folder\error4.txt'
);
Файл формата XML
<?xml version="1.0"?>
<BCPFORMAT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format">
-<RECORD>
<FIELD MAX_LENGTH="5" TERMINATOR="|" xsi:type="CharTerm" ID="1"/>
<FIELD MAX_LENGTH="1" TERMINATOR="|" xsi:type="CharTerm" ID="2"/>
<FIELD MAX_LENGTH="6" TERMINATOR="|" xsi:type="CharTerm" ID="3"/>
<FIELD MAX_LENGTH="6" TERMINATOR="|" xsi:type="CharTerm" ID="4"/>
<FIELD MAX_LENGTH="2" TERMINATOR="|" xsi:type="CharTerm" ID="5"/>
<FIELD MAX_LENGTH="50" TERMINATOR="|" xsi:type="CharTerm" ID="6"/>
<FIELD MAX_LENGTH="50" TERMINATOR="|" xsi:type="CharTerm" ID="7"/>
<FIELD MAX_LENGTH="50" TERMINATOR="|" xsi:type="CharTerm" ID="8"/>
<FIELD MAX_LENGTH="50" TERMINATOR="|" xsi:type="CharTerm" ID="9"/>
<FIELD MAX_LENGTH="50" TERMINATOR="|" xsi:type="CharTerm" ID="10"/>
<FIELD MAX_LENGTH="200" TERMINATOR="\r\n" xsi:type="CharTerm" ID="11"/>
</RECORD>
-<ROW>
<COLUMN xsi:type="SQLNVARCHAR" NAME="areafips" SOURCE="1"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="owncode" SOURCE="2"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="indcode" SOURCE="3"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="agglvlcode" SOURCE="4"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="sizecode" SOURCE="5"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="year" SOURCE="6"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="qtr" SOURCE="7"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="disclosurecode" SOURCE="8"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="areatitle" SOURCE="9"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="owntitle" SOURCE="10"/>
<COLUMN xsi:type="SQLNVARCHAR" NAME="industrytitle" SOURCE="11"/>
</ROW>
</BCPFORMAT>
Сообщение об ошибке
Msg 4832, Level 16, State 1, Line 15
Bulk load: An unexpected end of file was encountered in the data file.
Файл ошибок
Row 2 File Offset 161 ErrorFile Offset 0 - HRESULT 0x80004005
12007|0|10|70|0|2017|2||Some County, Nevada|Total
Covered12007|0|10|70|0|2017|2||Some County, Nevada|Total Covered
Похоже, что он не распознает I между 10-м и 11-м полями. Он распознает их раньше, но на последнем он терпит неудачу.
- Правильно ли задан терминатор строки "\ r \ n"?
- Любые другие идеи о том, почему он не функционирует должным образом?