プロが教える店舗&オフィスのセキュリティ対策術

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
1SQLCHAR01""0 Firsrt_QUOTE ""
2SQLCHAR020"\","1年月 ""
3SQLCHAR010","2データ1 ""
4SQLCHAR010","3データ2 ""
5SQLCHAR010","4データ3 ""
・・・
66SQLCHAR010"\r\n"65データ64 ""

しかしエラーになってしまいます。
そもそも列数が違うと無理なのでしょうか。

A 回答 (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

って書きますよね?
やっているのは全く同じことです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/24 11:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A