- - PR -
SQLで追加・更新を行う条件文の書き方を教えてください
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-19 09:25
お世話になります。
現在、データベースに日付・平均気温・天気のデータを格納しようとしていて、格納しようとしているデータと同じ日付のデータがあればUPDATE、なければINSERTをしようと考えています。そこで、下記のようなSQLコマンドを作ってみました。 ---------------------------------------------------- sqlCommandDB.CommandText = "SELECT 日付 FROM 天気情報 CASE WHEN 日付=@WeatherDataDate THEN UPDATE 天気情報 SET 日付=@WeatherDataDate,平均気温=@WeatherDataHeikin,天気=@WeatherDataTenki WHERE 日付=@WeatherDataDate ELSE INSERT INTO 天気情報 VALUES(@WeatherDataDate,@WeatherDataHeikin,@WeatherDataTenki) END"; ---------------------------------------------------- 便宜上改行してありますが、全て一行で書いています。 しかし、実行すると、 ---------------------------------------------------- キーワード 'CASE' 付近に正しくない構文があります。 キーワード 'ELSE' 付近に正しくない構文があります。 キーワード 'END' 付近に正しくない構文があります。 ---------------------------------------------------- と表示されて、UPDATEもINSERTもしません。おそらく条件分岐の構文が根本的に間違っているのだと思うのですが、どうしても原因がわかりませんので、ご助言いただければと思います。 なお、上記のUPDATEやINSERTをそのまま実行すれば、正常に更新・挿入ができていましたので、そのコマンドには間違いはないかと思います。 以上、お手数ですがご回答よろしくお願いいたします。 | ||||
|
投稿日時: 2006-09-19 09:39
とりあえず SELECT文 INSERT文 とUPDATE文を完成させてください
[ メッセージ編集済み 編集者: 七味唐辛子 編集日時 2006-09-19 09:51 ] | ||||
|
投稿日時: 2006-09-19 10:00
CASE文でこのような事はできないと思いました。
やるならばIF文ですが、そこは利用しているDBMSに依存しますね・・・。 | ||||
|
投稿日時: 2006-09-19 10:19
SQL Serverだったらこんな感じ?
if ( SELECT count(*) FROM 天気情報 where 日付=@WeatherDataDate ) = 0 INSERT INTO 天気情報 VALUE (@WeatherDataDate,@WeatherDataHeikin,@WeatherDataTenki) else UPDATE 天気情報 SET 日付=@WeatherDataDate,平均気温=@WeatherDataHeikin,天気=@WeatherDataTenki WHERE 日付=@WeatherDataDate | ||||
|
投稿日時: 2006-09-19 10:46
みなさん、ご回答ありがとうございます。
>めだかさん その方法でバッチリできました!ありがとうございます! >Ahfさん if文が使えるSQLがあるというのを知りませんでした……。 SQLに依存しているんですね。大変参考になりました。 今後ともよろしくお願いいたします。 ※記述を忘れていましたが、SQLはMSSQLです。 [ メッセージ編集済み 編集者: Wingard 編集日時 2006-09-19 10:49 ] | ||||
|
投稿日時: 2006-09-19 10:55
SQLがSQLに依存するって日本語的に変だよね。 正しくはDBMSに依存する。ね。 |
1