- PR -

ストアドプロシージャーで分かりません

1
投稿者投稿内容
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 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」がある為だと思います。
どういうロジックを組めば誕生日が来ていない人も更新対象に
なるか分からないのでどなたかご教授お願いします。


taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2004-10-08 12:42
SQLServerを知らないので勘違いならごめんなさい。
endとbeginって対になるものではなかったですか?
if begin ... end else begin ... end のように。
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2004-10-08 13:08
>endとbeginって対になるものではなかったですか?
そうなんですが
テーブルの最後のレコードまで処理をしたいのですが
endとbeginを対に書くとendと最初に書いたところまでがループされるみたいなので^^

わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2004-10-08 13:26
すいません
自分が勘違いをしていました。

自分もいろいろと試しているうちに
正常に起動しました。
ありがとうございました。

これからもう一度ソースを見直して
いこうと思っています。
ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-10-06 09:52
うるう日が誕生日の人もちゃんと考慮しないとダメダ〜メ

[ メッセージ編集済み 編集者: ぷさいくろう 編集日時 2006-10-07 20:27 ]
1

スキルアップ/キャリアアップ(JOB@IT)