0

「dictionary」という名前のデータベースには、「column1」と「column2」という名前の 2 つの列があります。どちらもNULL値を受け入れることができます。両方の列のデータ型は ですINT。今度は、bcp を使用してテキスト ファイルから column2 のみに挿入したいと考えています。フォーマットファイルを作りました。私のフォーマットファイルはそのようなものです

<?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="," MAX_LENGTH="7"/>
      <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/>
     </RECORD>
      <ROW>
        <COLUMN SOURCE="1" NAME="column2" xsi:type="SQLINT"/>
      </ROW>
   </BCPFORMAT>

私のバルクステートメントは

BULK INSERT dictionary
 FROM 'C:\Users\jka\Desktop\n.txt'
  WITH
  (
   FIELDTERMINATOR = '\n',
    ROWTERMINATOR = '\n',
   FORMATFILE = 'path to my format file.xml'
   ) 

しかし、それはうまくいきませんでしたか?どうすればこれを解決できますか?

N:B: 私の txt ファイルは次のようになります

123 
456
4101

……

編集されたもう1つの質問:この手法で1つの列を埋めることができますが、1行目から前のようにテキストファイルから別の列を埋めるとき。どうやってやるの ???

4

2 に答える 2

0

あなたのフォーマットファイルが正しいと仮定すると、私はあなたが捨てる必要があると信じてFIELDTERMINATORROWTERMINATORますBULK INSERT

BULK INSERT dictionary
FROM 'C:\Users\jka\Desktop\n.txt'
WITH (FORMATFILE = 'path to my format file.xml') 

また、次のことを確認してください。

  1. 入力ファイルのエンコーディングは正しいです。あなたの場合、UTF-8やUnicodeではなくANSIである可能性が最も高いです。
  2. 行ターミネータ (フォーマット ファイルの 2 番目のフィールド ターミネータ) は、実際\r\nには ではなく\n.

更新最初の列をスキップする必要があるため:

BULK INSERTXML 形式のファイルでは、ステートメントを使用してテーブルに直接インポートする場合、列をスキップする方法がありません。目的の結果を達成し、引き続き XML 形式のファイルを使用するOPENROWSET(BULK...)には、選択リストとターゲット テーブルで列の明示的なリストを使用して提供する必要があります。

したがって、使用するためだけにデータを挿入するにcolumn2は:

INSERT INTO dictionary(column2)
SELECT column2
  FROM OPENROWSET(BULK 'C:\temp\infile1.txt',
       FORMATFILE='C:\temp\bulkfmt.xml') as t1;

データ ファイルにフィールドが 1 つしかない場合、フォーマット ファイルは次のようになります。

<?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="C1" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/>
    </RECORD>
    <ROW>
        <COLUMN SOURCE="C1" NAME="column2" xsi:type="SQLINT"/>
    </ROW>
</BCPFORMAT>
于 2013-02-16T19:24:24.200 に答える
0

データ ファイルには 1 つのフィールドが含まれているため、フォーマット ファイルにはそれが反映されている必要があります。

<RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\r\n"/>
</RECORD>
于 2013-02-16T20:56:35.950 に答える