0

私はあなたが言っているのを聞くことができます:それでは、それほど単純ではありませんね.

ここにテーブルがあります:

CREATE TABLE [bulkimport].[Test](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Data] [nvarchar](50) NULL,
 CONSTRAINT [PK_Test_1] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

tsql は次のとおりです。

TRUNCATE TABLE bulkimport.Test

BULK INSERT bulkimport.Test 
FROM 'D:\Referenzliste_VKnr.csv' 
WITH (
    FORMATFILE='D:\VKnrImport.xml', 
    CODEPAGE=28591,
    ERRORFILE='D:\VKnrImportError.txt'
)

私の構成ファイルは次のようになります。

<?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="CharTerm" TERMINATOR="\r\n" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1"  NAME="Data" LENGTH="50" xsi:type="SQLNVARCHAR" />
    </ROW>
</BCPFORMAT>

最後に、データからの抜粋:

18
26
34
42
59
67
75
83
91
109
117
125
133

各行の後にキャリッジ リターン ライン フィードがあり、最後に 1 行の空行が残ります。SQL Server 2012 を使用して、csv ファイルの各エントリに対して NULL を取得します。

4

1 に答える 1

1

あなたの質問はこれとまったく同じではありませが (エラーは発生しませんでした)、同じ問題です。ドキュメントが言うように:

XML 形式のファイルでは、bcp コマンドまたは BULK INSERT ステートメントを使用してテーブルに直接インポートする場合、列をスキップできません。ただし、テーブルの最後の列を除くすべての列にインポートできます。最後の列以外をスキップする必要がある場合は、データ ファイルに含まれる列のみを含むターゲット テーブルのビューを作成する必要があります。次に、そのファイルからビューにデータを一括インポートできます。

つまり、 XML 形式のファイルを使用する場合は、テーブルの最後の列のみをスキップできます。Idしかし、最初の列である列をスキップしようとしています。

2 つの解決策は次のとおりです。

  • 非 XML 形式のファイルを使用する
  • OPENROWSETを使用する

この非 XML 形式のファイルを使用すると、データが正常に読み込まれました。

10.0
1
1       SQLCHAR             0       100     "\r\n"   2     Data         Latin1_General_CI_AS

ただし、 を使用して列を並べ替えたり、フラット ファイルからのデータを操作したりOPENROWSETできるため、より柔軟です。SELECT

于 2013-04-19T21:39:53.880 に答える