- PR -

順番の表示

投稿者投稿内容
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-02-27 13:33
度々お世話になっております。
ストアドで自動採番をする時以下のようにカーソルを使いカウントしています。
******************************
declare @a varchar(2), @num int

declare cur cursor for
select 記号 from 地図
open cur
fetch next from cur
into @a

set @num = 1
while @@Fetch_Status = 0
begin
insert into 使用記号 (順番, 記号) values (@num, @a)
set @num = @num + 1
fetch next from cur
into @a
end
close cur
deallocate cur
return
******************************
でも処理スピードを速めたいので
insert into 使用記号 select ???, 記号 from 地図
と一発でやりたいのです。
SQLでレコードの行番号は取ることができますでしょうか?

何かいい案があればご教授頂きたいです。
よろしくお願いします。
(OS:XP Profeccinal SQL:MSSQL2000)

[ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-02-27 13:35 ]
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-02-27 14:00
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_ia-iz_5to2.asp
このあたりが参考になるかと思います。
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-02-27 14:24
こ、これは!?
IDENTITY関数・・・insert intoだけに使える関数があったのですね。
これを使ってスピードアップを図ろうと思います。

本当ありがとうございました!!
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-02-27 16:57
今気付いたのですが一度作成したテーブルに採番を振る関数なんですね。

作ってる最中に採番していくという行為はできるのでしょうか?
(あまり聞いてばかりも悪いので調べてみます^^)

[ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-02-27 16:57 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-02-27 19:49
insertの度に1から振りなおしたいって事ですか?

declare @tbl table(順番 int identity(1,1), 記号 int)
insert into @tbl select 記号 from 地図
insert into 使用記号 select * from @tbl

一々ストアド化しなくても、上記SQLをそのまま投げればいけますよ。
都度テーブル変数を作ってid列を定義すれば、
毎回好きな番号から開始できます。
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-02-28 10:59
アドバイスありがとうございます。

2個目の処理
insert into 使用記号 select * from @tbl
が速ければ1つのSQLで処理したことになりますね!

今から検証しようと思います。
また何か分かったら報告します!


[ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-02-28 10:59 ]
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-02-28 15:34
さっきまでエラーメッセージ8101:IDENTITY_INSERTがONの時だけ・・・
のエラーが出てたんですが

insert into @tbl (記号) select 記号 from 地図
にしたら上手く行きました。
ここで時間を食ってしまいましたが恐らく一時テーブルには自動採番されてるはず。
・・・今から調べてみます。

教えて下さった方々に感謝です。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-02-28 16:51
環境がないのでSQLのエラーチェックは行っていませんでした・・・
id列を含む場合のinsertで、列名が必要でしたね。
失礼しました。

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