SQLを仕事の一部にとりいれることを開始しました。

ところが、CREATE TABLEの段階でとまどっています。エラーメッセージ続出です。以下のようなシンタックスをつかっています。変数が多くなるといちいち、設定するのが面倒です。どうしたらよいのでしょうか?私が使っているSASだったら、勝手に変数名とか、フォーマットを読み取ってくれます。

SASを使って自動的にデータを理解して、SQLシンタックスを書いてくれるプログラムを書いたものの、それでも形式が間違ってるだの、そういうエラーが続出です。そもそも、変数が100とかあったら、どうしたらよいのでしょう???

CREATE TABLE INDIV
(
id VARCHAR(6),
var1 VARCHAR(30) ,

var2 VARCHAR(100) ,

<省略>

)

GO
BULK
INSERT INDIV
FROM 'C:\Users\xxx.csv'
WITH
(
FIRSTROW=2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

DROP TABLE INDIV

以下のようなエラーが続出です。変数ごとのフォーマットの設定が間違っているということみたいですが、直しても、また出てきます。

Msg 4863, Level 16, State 1, Line 3
Bulk load data conversion error (truncation) for row 7, column 95 (var1).
Msg 4863, Level 16, State 1, Line 3
Bulk load data conversion error (truncation) for row 81, column 103 (var2).
Msg 4863, Level 16, State 1, Line 3

英語喉オンラインコースへ飛ぶ(ニュースレター登録をお願いします)

Follow me!

4 thoughts on “SQLに挑戦してみたが、、

  1. eeshudo says:

    お久しぶりです。

    これもう出来ました?
    出来ていたら、以下は無視してください。

    Databaseの種類はSQLサーバですか?

    このエラーメッセージがどの段階で発生しているのかわかりません。

    ですので、
    まず、Create table を実行し、INDIVテーブルが出来たことを確認。(STEP 1)
    次に、 ‘C:\Users\xxx.csv’ のデータをINSERTして確認(STEP 2)
    のようにしてもらえますか。

    私の勘を言うと、STEP2でエラーが発生していて、
    xxx.csv の何処かに、Create Tableで定義したカラムの容量を超える部分があるように見えます。

  2. eigonodo says:

    EESHUDOさん、ご指摘とのおり、後半で間違っているようです。でも、間違いが多すぎて、直しきれません、、(涙)。もしかしたら、SQLの目的は、きちんとデータを読み込むことではないのかもしれませんね。もしかしたら、SQLはきちんとデータを集めるとこからはじめるのかな、、と。

    SASの場合データに、100個ぐらい変数が入っていることはざらです。でもSQLのばあい、おそらくRELATIONAL DATABASEなので、一個のテーブルに変数が少なめなんじゃないでしょうか?

    私が仕事で使っているデータは、ACCESSに入っているので、そのACCESS内での練習をすることにしました。そうすることで、データを作る必要がなくなります。

    ACCESS内ですが、SQL STATTEMENTがQUERY内に一個しか書けないのが不思議です。

    ちなみに、SQL SERVER MANAGEMENT STUDIOというのを使っていましたが、CSVデータを読みこむのが難しすぎて挫折しています。

  3. eeshudo says:

    SASやRでデータを加工するのは大変ですよね。。。
    SASの方が、どういうことに疑問を持ってらっしゃるか非常に興味があります。

    >EESHUDOさん、ご指摘とのおり、後半で間違っているようです。でも、間違いが多すぎて、直しきれません、、(涙)。
    >もしかしたら、SQLの目的は、きちんとデータを読み込むことではないのかもしれませんね。
    >もしかしたら、SQLはきちんとデータを集めるとこからはじめるのかな、、と。

    今回書いておられるSQL文は、おそらく
    Access ー(1)→ CSVファイル ―(2)→ SQLServerという経路を経られたのだと思います。

    (1)を通ると、どうしてもCSVファイルを確認しなければならないので、
    暫くは、Access → SQLServer と直接行きましょう。

    もちろん、CSVやXLSでデータ提供されたものを使う機会もあるかと思いますが、それはその時解決ということで(^^ゞ

    >SASの場合データに、100個ぐらい変数が入っていることはざらです。
    >でもSQLのばあい、おそらくRELATIONAL DATABASEなので、一個のテーブルに変数が少なめなんじゃないでしょうか?

    ココで仰っている変数とは、列の数のことですよね?
    それであれば、1000位いけるはずなので大丈夫だと思います。

    >私が仕事で使っているデータは、ACCESSに入っているので、そのACCESS内での練習をすることにしました。
    >そうすることで、データを作る必要がなくなります。

    Accessにデータが入っているということですので、SQLサーバと接続できるのでデータのやり取りに幅が持たせられます。
    http://oshiete.goo.ne.jp/qa/6586593.html

    Accessにインポート
     その名の通り、SQLサーバのテーブルを完全にコピーする方法と
    Accessにリンク
     SQLサーバのテーブルをAccessで参照する方法で、直接操作できます。
     ちなみに、コピペでデータを張ったりもできます。

    >ACCESS内ですが、SQL STATTEMENTがQUERY内に一個しか書けないのが不思議です。
    どういった使い方を希望されていますか?
    これは、分からなくもない疑問ではありますが、2つQueryを作ってマクロで呼び出す等で回避するのが早いですね。

    >ちなみに、SQL SERVER MANAGEMENT STUDIOというのを使っていましたが、CSVデータを読みこむのが難しすぎて挫折しています。
    これは、先の Access to Sql Serverという手で解決できます。

    メールで呼んで頂ければ、Skype立ち上げますんで、遠慮なくどうぞ。

  4. eigonodo says:

    EESHUDOさんにじきじきにSKYPEレッスンを受けることになりましたので、よろしく~。義理の弟からもらったたくさんのSQLの本はADMINISTRATIONとかそういうのばかりで、どこにSYNTAXがあるのかわからないくらいでした。でも、たぶん、それはSQLをSASとかSPSSと同じように扱っている証拠でしょうかね。根本的に何か違うなと思っています。

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.