- - PR -
順番の表示
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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 ] |
|
投稿日時: 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
このあたりが参考になるかと思います。 |
|
投稿日時: 2006-02-27 14:24
こ、これは!?
IDENTITY関数・・・insert intoだけに使える関数があったのですね。 これを使ってスピードアップを図ろうと思います。 本当ありがとうございました!! |
|
投稿日時: 2006-02-27 16:57
今気付いたのですが一度作成したテーブルに採番を振る関数なんですね。
作ってる最中に採番していくという行為はできるのでしょうか? (あまり聞いてばかりも悪いので調べてみます^^) [ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-02-27 16:57 ] |
|
投稿日時: 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列を定義すれば、 毎回好きな番号から開始できます。 |
|
投稿日時: 2006-02-28 10:59
アドバイスありがとうございます。
2個目の処理 insert into 使用記号 select * from @tbl が速ければ1つのSQLで処理したことになりますね! 今から検証しようと思います。 また何か分かったら報告します! [ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-02-28 10:59 ] |
|
投稿日時: 2006-02-28 15:34
さっきまでエラーメッセージ8101:IDENTITY_INSERTがONの時だけ・・・
のエラーが出てたんですが insert into @tbl (記号) select 記号 from 地図 にしたら上手く行きました。 ここで時間を食ってしまいましたが恐らく一時テーブルには自動採番されてるはず。 ・・・今から調べてみます。 教えて下さった方々に感謝です。 |
|
投稿日時: 2006-02-28 16:51
環境がないのでSQLのエラーチェックは行っていませんでした・・・
id列を含む場合のinsertで、列名が必要でしたね。 失礼しました。 |
