Date: Thu, 19 Dec 2002 10:44:37 +0900
From: "Junichi Meno" <who@sub.example.jp>
1年前に投稿させていただき、以来1年間悩みを引きずっています。
(やりたいこと)
フォーム上の検索ボックスにカナシメイを入力し、検索で得られた結果を別のフォー
ムにカナ昇順で一覧表示するにあたり、先頭行にユーザーに選択させるための1から
始まるシーケンシャルな番号を振ること。
これを実現するために、堀川さんのSQLSERVER7(MSDE)完全トレーニングにほとんどこ
れだと言う内容を発見し(下巻23章)、宝物を見つけたように喜び、いろいろと試し
ているのですが、シーケンシャルな番号を振る部分だけがどうしてもわかりません。
参考プログラムでは番号部分の主キーNO列がIDENTITY(1,1)と設計されており、これ
だと検索を繰り返すたびに番号が増えていってしまいます。
そこで主キーとIDENTITYを解除し、いったんNOがNULLの一時テーブルを作成し、これ
をカナシメイ順に並べた上で、カーソルで連番を振っていけないだろうかと考え、ス
トアドプロシージャの中に次のようなカーソル処理を埋め込んでみました。
(検索HITテーブルはNO,HID,SID,UID,ID,カナシメイ→IDは検索するテーブルの主
キーです。また、このテーブルの主キーもとりあえず、IDに設定しています。)
--////////////////////////////
Alter PROCEDURE P_検索実行
--/////////////////////////////
@kana varchar(20) -- カナ検索の変数
(中略)
INSERT INTO 検索HIT (ID,カナシメイ )
SELECT ID,カナシメイ FROM Mt_Persons
WHERE ( Mt_Persons.カナシメイ Like @kana + '%')
ORDER BY カナシメイ
-- 検索で得られたレコード件数の値(挿入レコード件数の値)
SELECT @TOTAL = @@ROWCOUNT
declare @no int
declare @cnt int
declare cur_検索HIT cursor
for select no from RedxDb..検索HIT
order by カナシメイ
open cur_検索HIT
if (@total>0)
begin
set @cnt=0
while(@cnt<=@total)
begin
fetch next from cur_検索HIT into @no
set @cnt=@cnt+1
set @no=@cnt
end
end
close cur_検索HIT
deallocate cur_検索HIT
(後略)
大文字の部分が堀川さんの知的なコードで、小文字の部分がいまだにカーソルとトリ
ガをほとんど理解できていない私めの稚拙なコードです。
おそらく、カーソルに対する考え方自体が間違っていると思いますが、ずばりその間
違えをどなたかご指摘いただけませんでしょうか?また、カーソルなど使わずにこん
な簡単な
方法があると言うことであれば、ご紹介願えませんでしょうか?mdbであれば、なん
なく解決できるはずなのに・・・(T_T)
長々と、とてもとても恐縮です。
********************************
********************************
目野 淳一
who@sub.example.jp
********************************
********************************
********************************
********************************
目野 淳一
who@sub.example.jp
090-57221505
0944-32-2560
********************************
********************************
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|