- - PR -
ストアドプロシージャーで分かりません
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-10-08 12:06
現在、ストアドプロシージャーを使用してテーブルに存在している年齢を
更新するプログラムを作成しています。 そこでつまづいてしまっているのでどなたかご教授お願いします。 [開発環境] SQLServer [やりたい事] @テーブルの年齢を更新 [更新条件] ・テーブルに誕生日が格納されている(格納されていない場合は、更新対象外) ・年齢は、本日の日付と誕生日から算出してテーブルの値と 違う場合のみ更新する [年齢算出方法] ・本日の日付(月日) <= 生年月日(月日)の時 年齢=本日日付(年)-誕生日(年)-1 ・本日の日付(月日) > 生年月日(月日)の時 年齢=本日日付(年)-誕生日(年) [プログラム] while @@fetch_status = 0 begin set @BirthdayYear = CONVERT(SMALLINT,substring(CONVERT(varchar,@Birthday, 20),0,5)) set @Kazoe = @TodayYear - @BirthdayYear set @TodayMD = CONVERT(SMALLINT,DATENAME(mm,@Today))*100 + CONVERT(SMALLINT,DATENAME(dd,@Today)) set @BirthdayMD=CONVERT(SMALLINT,DATENAME(mm,@Birthday))*100+CONVERT(SMALLINT,DATENAME(dd,@Birthday)) if @Birthday <> null if @TodayMD > @BirthdayMD if @Age <> @Kazoe update MstCustomer set Age = @Kazoe where CustomerNo = @CustomerNo fetch next from Customer into @CustomerNo,@Birthday,@Age end if @TodayMD <= @BirthdayMD if @Age <> @Kazoe -1 update MstCustomer set Age = @Kazoe - 1 where CustomerNo = @CustomerNo fetch next from Customer into @CustomerNo,@Birthday,@Age end end close Customer DEALLOCATE Customer [現在の現象] 既に誕生日が来ている人のみ更新される。 (まだ、誕生日が来ていない人は、更新されない) [自分が分からない箇所] 現在、「if @TodayMD <= @BirthdayMD」の処理に来ません。 原因は、恐らくその前にある「end」がある為だと思います。 どういうロジックを組めば誕生日が来ていない人も更新対象に なるか分からないのでどなたかご教授お願いします。 |
|
投稿日時: 2004-10-08 12:42
SQLServerを知らないので勘違いならごめんなさい。
endとbeginって対になるものではなかったですか? if begin ... end else begin ... end のように。 |
|
投稿日時: 2004-10-08 13:08
>endとbeginって対になるものではなかったですか?
そうなんですが テーブルの最後のレコードまで処理をしたいのですが endとbeginを対に書くとendと最初に書いたところまでがループされるみたいなので^^ |
|
投稿日時: 2004-10-08 13:26
すいません
自分が勘違いをしていました。 自分もいろいろと試しているうちに 正常に起動しました。 ありがとうございました。 これからもう一度ソースを見直して いこうと思っています。 |
|
投稿日時: 2006-10-06 09:52
うるう日が誕生日の人もちゃんと考慮しないとダメダ〜メ[ メッセージ編集済み 編集者: ぷさいくろう 編集日時 2006-10-07 20:27 ] |
1