• 締切済み

テーブル列数とデータファイル列数の違うbcpインサートをしたい

DBのテーブルの列数は258です。 インサートするデータファイルの列数は65です。 データファイルは","で区切られたファイルです。 SQL Serverは2005です。 コマンドを下記のように書きました。 SQLCMD -S"\SQLEXPRESS" -U"user" -P"pass" -d"計測" -Q"INSERT INTO [計測データ] SELECT 4,CONVERT(datetime,年月),データ1,データ2,データ3,データ4,データ5,・・・データ256 FROM OPENROWSET(BULK 'D:\200906.csv', FORMATFILE='D:\test.fmt',FIRSTROW = 2) x" フォーマットファイルは、 8.0 68 1 SQLCHAR 0 1 "" 0 Firsrt_QUOTE "" 2 SQLCHAR 0 20 "\"," 1 年月 "" 3 SQLCHAR 0 10 "," 2 データ1 "" 4 SQLCHAR 0 10 "," 3 データ2 "" 5 SQLCHAR 0 10 "," 4 データ3 "" ・・・ 66 SQLCHAR 0 10 "\r\n" 65 データ64 "" しかしエラーになってしまいます。 そもそも列数が違うと無理なのでしょうか。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

bcpとsqlcmdによるOPENROWSETの実行は別物です。 同じようなことはできますが、まずは区別して認識しましょう。 OPENROWSETは、ファイルをテーブルに見立ててSELECTする方法です。 だから書いているクエリも"INSERT INTO ~ SELECT ~"です。 列数の少ないテーブルAから列数の多いテーブルBにINSERTするとき、どうしていますか? INSERT INTO テーブルA (列1,列2,列3,...,列10) SELECT 列1,列2,列3,....,列10 FROM テーブルB って書きますよね? やっているのは全く同じことです。

taku_pon
質問者

お礼

ありがとうございます。 足りない列数分だけSELECTの方にNULLと書いたらできました。

関連するQ&A