@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

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

1
投稿者投稿内容
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2004-10-08 11:05
現在SQLServerでストアドプロシージャを作成しています。
そこでどうしても詰まっているので知恵を拝借できないでしょうか

[使用環境]
SQLServer

[プログラムの仕様]
月次処理でテーブルを参照して顧客の年齢を更新
する処理

[プログラム]
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
select sub01(@Age,@Kazoe,@CustomerNo,@Birthday)
if @Age <> @Kazoe
update MstCustomer
set Age = @Kazoe
where CustomerNo = @CustomerNo
fetch next from Customer
into @CustomerNo,@Birthday,@Age
end

else

if @Age <> @Kazoe -1
update MstCustomer
set Age = @Kazoe - 1
where CustomerNo = @CustomerNo
fetch next from Customer
into @CustomerNo,@Birthday,@Age
end
end 


end
close Customer
DEALLOCATE Customer
////////////////////////////////////////////////////
以上のようにプログラムを組んで見たのですが
そうしたら誕生日が来た人のみしか更新されません。
恐らく「if @TodayMD <= @BirthdayMD」の前にend
がある為にここの処理にくる前に次のレコードを参照して
いるからだと思うのですがこの場所の対応がわかりません。
どなたかご教授お願いします。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-10-08 11:46
こんにちは^^

イマイチ質問の内容がわかりません。

>誕生日が来た人のみしか更新されません。
誕生日が来ない人も更新したいということでしょうか?更新する条件をもう少し詳しく説明してください。

>if @TodayMD <= @BirthdayMD
提示されたSQL見る限りこの構文はどこにも無いようですが、これはどこに記述されているのですか?

また、SQLの中で使用している変数やフィールドの型がこれだけだと分からないので、最初にCONVERT等で変換している部分はコメントをつけたほうが、分かり易くなると思います。

あと、質問の内容自体が.NETと全然関係ないので、Database Expert会議室に投稿したほうが回答が得易いと思います。
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2004-10-08 11:49
ご返答ありがとうございました。
そうですね
むこうで質問したはずだったのですがこちらにかきこまれていたので^^
1

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