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
お久しぶりです。
これもう出来ました?
出来ていたら、以下は無視してください。
Databaseの種類はSQLサーバですか?
このエラーメッセージがどの段階で発生しているのかわかりません。
ですので、
まず、Create table を実行し、INDIVテーブルが出来たことを確認。(STEP 1)
次に、 ‘C:\Users\xxx.csv’ のデータをINSERTして確認(STEP 2)
のようにしてもらえますか。
私の勘を言うと、STEP2でエラーが発生していて、
xxx.csv の何処かに、Create Tableで定義したカラムの容量を超える部分があるように見えます。
EESHUDOさん、ご指摘とのおり、後半で間違っているようです。でも、間違いが多すぎて、直しきれません、、(涙)。もしかしたら、SQLの目的は、きちんとデータを読み込むことではないのかもしれませんね。もしかしたら、SQLはきちんとデータを集めるとこからはじめるのかな、、と。
SASの場合データに、100個ぐらい変数が入っていることはざらです。でもSQLのばあい、おそらくRELATIONAL DATABASEなので、一個のテーブルに変数が少なめなんじゃないでしょうか?
私が仕事で使っているデータは、ACCESSに入っているので、そのACCESS内での練習をすることにしました。そうすることで、データを作る必要がなくなります。
ACCESS内ですが、SQL STATTEMENTがQUERY内に一個しか書けないのが不思議です。
ちなみに、SQL SERVER MANAGEMENT STUDIOというのを使っていましたが、CSVデータを読みこむのが難しすぎて挫折しています。
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立ち上げますんで、遠慮なくどうぞ。
EESHUDOさんにじきじきにSKYPEレッスンを受けることになりましたので、よろしく~。義理の弟からもらったたくさんのSQLの本はADMINISTRATIONとかそういうのばかりで、どこにSYNTAXがあるのかわからないくらいでした。でも、たぶん、それはSQLをSASとかSPSSと同じように扱っている証拠でしょうかね。根本的に何か違うなと思っています。