私は毎日、数十の中程度のサイズのテキスト ファイルを SQL SERVER にインポートするコードを書いています。現在、これらは FOXPRO データベースにインポートされています。SQL SERVER を使用するように変換しています。すべての固定長ファイルを完成させましたが、最後の 3 つのデータ ファイルには、各行の最後のフィールドとして可変長フィールドがあります。この最終フィールドの長さは最大 32,000 バイトです。データベースでは、これを VARCHAR(MAX) として宣言しました。
フィールド ターミネータは、改行である行ターミネータです。つまり、行は、2 つの改行ではなく、フィールドの終わりと行の終わりの両方を示す単一の「0x0a」で終了します。
私が使用しているSQLは次のとおりです。
BULK INSERT
[MyDB].[dbo].[X]
FROM 'C:\temp\eep.dat'
WITH
(
DATAFILETYPE ='CHAR',
FORMATFILE='C:\temp\translate_eep.xml',
ERRORFILE='C:\temp\ERR_eep.TXT',
FIELDTERMINATOR='0X0A',
ROWTERMINATOR='0X0A'
)
GO
Translate_eep.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 ID="1" xsi:type="CharFixed" LENGTH="5"/>
<FIELD ID="2" xsi:type="CharFixed" LENGTH="5"/>
<FIELD ID="3" xsi:type="CharFixed" LENGTH="5"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="0X0A"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="c1" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="2" NAME="c2" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="3" NAME="c3" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="4" NAME="c4" xsi:type="SQLCHAR"/>
</ROW>
</BCPFORMAT>
残念ながら、これを使用すると、1行インポートしてから終了します。ファイル全体を読み取るにはどうすればよいですか?
サンプルデータ:
ABCDE12345EMILYLove is not all. It is not meat, nor drink, nor slumber<lf>
FGHIJ67890SNL Oh, no! Mr. bill!<lf>
KLMNO24680ALEX All Nature is but art, unknown to thee<lf>
PQRST13579FROSTSome say the world will end in fire,<lf>