C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 採番に関して


(過去ログ 56 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■31324 / inTopicNo.1)  採番に関して
  
□投稿者/ BIGゴージャス叶 (1回)-(2009/01/20(Tue) 15:02:03)

分類:[C#] 

言語;C#
DB;Sql Server 2005

お世話になります。

画面中にある「採番」ボタンを押下後、
現在使用されていない番号の最少値を採番テーブルより取得し、
「採番」ボタン横にあるテキストボックスに最小値+1を表示させ、
画面中の「登録」ボタン押下で採番テーブルに登録するシステムですが、
いいアイデアが思い浮かびません…。

ちなみに、複数端末より同時に起動できるシステムです。
採番テーブルの件数はMAX65000件になります。

自分で考えたのは、採番テーブルにある空き番号を、
画面フォームロード時に全取得し、リストに確保しておき、
「採番」ボタンが押される度に空き番号を表示させ、
登録時に書き込めなかったらエラーにするといった考えですが、
件数が65000件なので、空き番号をリストに確保するだけでも
パフォーマンス的に結構面倒なやり方なのかと考え、
投稿させて頂きました。

何か良い案などご提案頂ければ幸いです。

宜しくお願い致します。

引用返信 編集キー/
■31332 / inTopicNo.2)  Re[1]: 採番に関して
□投稿者/ επιστημη (1549回)-(2009/01/20(Tue) 15:27:55)
επιστημη さんの Web サイト
> 件数が65000件なので、空き番号をリストに確保するだけでも
> パフォーマンス的に結構面倒なやり方なのかと考え、

かどうか、やってみてはいかがでしょ。

引用返信 編集キー/
■31336 / inTopicNo.3)  Re[1]: 採番に関して
□投稿者/ みきぬ (340回)-(2009/01/20(Tue) 15:40:51)
その昔、こんなスレッドが。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15927&forum=26
引用返信 編集キー/
■31364 / inTopicNo.4)  Re[1]: 採番に関して
□投稿者/ .SHO (544回)-(2009/01/20(Tue) 18:47:28)
No31324 (BIGゴージャス叶 さん) に返信

> 現在使用されていない番号の最少値を採番テーブルより取得し、
> 「採番」ボタン横にあるテキストボックスに最小値+1を表示させ、

最小値+1が使用されていない保障はないと思うけど。。。
引用返信 編集キー/
■31365 / inTopicNo.5)  Re[2]: 採番に関して
□投稿者/ Jitta on the way (257回)-(2009/01/20(Tue) 19:26:45)
No31364 (.SHO さん) に返信
> ■No31324 (BIGゴージャス叶 さん) に返信
>
>>現在使用されていない番号の最少値を採番テーブルより取得し、
>>「採番」ボタン横にあるテキストボックスに最小値+1を表示させ、
>
> 最小値+1が使用されていない保障はないと思うけど。。。

使用されていない番号の最小値…あ、1,2,4 と使っていたら、4になって使われていますね。

使っている最大値+1 だと、飛び番が出来るからダメ、ってことですかね。


(使用している番号)の集合から、(使用している番号+1)を引くと、「使用していない番号-1」が出てきます。この集合から最小値をもとめ、+1すれば良いのかな?


でも、「登録」ボタンと同時に採番だとダメなのでしょうか?
引用返信 編集キー/
■31371 / inTopicNo.6)  Re[3]: 採番に関して
□投稿者/ .SHO (545回)-(2009/01/20(Tue) 20:59:11)
No31365 (Jitta on the way さん) に返信

> でも、「登録」ボタンと同時に採番だとダメなのでしょうか?

自分も、「登録」ボタンと同時(「採番」ボタンと同時?)に処理でいいと思います。

引用返信 編集キー/
■31372 / inTopicNo.7)  Re[4]: 採番に関して
□投稿者/ dogatana (29回)-(2009/01/20(Tue) 22:07:45)
No31371 (.SHO さん) に返信
> ■No31365 (Jitta on the way さん) に返信
>
>>でも、「登録」ボタンと同時に採番だとダメなのでしょうか?
>
> 自分も、「登録」ボタンと同時(「採番」ボタンと同時?)に処理でいいと思います。

複数の端末から同時に起動できるシステムとのことなので、空き番号の取得とそれを
使用済みにする処理のアトミック性の確保が重要になりそうですね。

クリティカルセクションなどの排他制御のしかけが必要ですが、取得用のプロセスを
1つに限定するのが簡単なのかな。
引用返信 編集キー/
■31373 / inTopicNo.8)  Re[5]: 採番に関して
□投稿者/ ちゃっぴ (196回)-(2009/01/20(Tue) 23:45:09)
ちゃっぴ さんの Web サイト
下手に自作するよりも、DBMS の機能を使った採番を行うのが個人的にはお勧めです。
特殊な要件がない限り。
引用返信 編集キー/
■31810 / inTopicNo.9)  Re[1]: 採番に関して
□投稿者/ pgm300 (15回)-(2009/01/29(Thu) 02:00:21)
SQLサーバーならid列使えますよね?

そこからはアイデア勝負ですが、MSがOracleからの移行のために
SSMAというツールを出しているのですが、その時のはすごかったですよ。

Oracleのsequenceオブジェクトをエミュレートするのに、
Functionを作成し、そのFunctionが何をするかというと、
ID列を持ったsequence名のテーブルをALTER TABLEして、
ID列のincrement Stepを現在の設定値+1してエミュレートしてました;

なんて方法もあるようです。
(要検証ですが)

> 言語;C#
> DB;Sql Server 2005
>
> お世話になります。
>
> 画面中にある「採番」ボタンを押下後、
> 現在使用されていない番号の最少値を採番テーブルより取得し、
> 「採番」ボタン横にあるテキストボックスに最小値+1を表示させ、
> 画面中の「登録」ボタン押下で採番テーブルに登録するシステムですが、
> いいアイデアが思い浮かびません…。
>
> ちなみに、複数端末より同時に起動できるシステムです。
> 採番テーブルの件数はMAX65000件になります。
>
> 自分で考えたのは、採番テーブルにある空き番号を、
> 画面フォームロード時に全取得し、リストに確保しておき、
> 「採番」ボタンが押される度に空き番号を表示させ、
> 登録時に書き込めなかったらエラーにするといった考えですが、
> 件数が65000件なので、空き番号をリストに確保するだけでも
> パフォーマンス的に結構面倒なやり方なのかと考え、
> 投稿させて頂きました。
>
> 何か良い案などご提案頂ければ幸いです。
>
> 宜しくお願い致します。
>
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -