餃子を食べるとき、何をつけますか?

こんばんわ。

現在、MSDEとC#でアプリケーションを考えていますが、
Accessだと自動採番のオートナンバー型がありますが、
MSDEではIDなどの通し番号の採番をどのように行うのが定番なのでしょう?

自動採番の仕組みをストアドプロシージャなどで組むのでしょうか?

よろしくお願いします。

A 回答 (4件)

#1です。



Accessのオートナンバーと同じです。
もう少し細かく書くと

create table tbl
(retu1 int IDENTITY,
retu1 varchar(10))

でテーブルを作ったとして、プログラムに書くinsert文はこうなります。

insert into tbl(retu2)
values
('あ')

これでretu1には勝手に連番がふられます。

retu1の値をプログラム側で使いたい時はストアドを使用する必要あり。

declare @i int
insert into tbl(retu2)
values
('あ')
set @i=@@IDENTITY

この@iを返すストアドにします。

.NETでは独自のメソッドがあるかもしれません。
    • good
    • 0

締め切ってないので補足します。



ストアドレベルでの同時実行なら、値の重複は、まず
有り得ません。

なので問題となるとすれば、受け取った側がスレッドセーフ
になっていない場合とかですね。

セッション管理とかに使いたいなら要注意。
    • good
    • 0
この回答へのお礼

utakataXEXさん、何度もありがとうございます。

締め切るの忘れていました。(^_^;)
おかげで、また情報をいただけました。

セッション管理には使いません。

ただ、スレッドセーフな状態というのは、
少々怪しい部分もあるので、ソフト同士の状態をスレッドセーフにできるかどうか実験してみたいと思います。

ありがとうございます。

お礼日時:2005/01/28 06:15

#2です。



create文を間違えました。

create table tbl
(retu1 int IDENTITY,
retu2 varchar(10))
    • good
    • 0
この回答へのお礼

たびたび回答ありがとうございます。

クエリアナライザで動作確認しました。
まだまだ、教えていただいたことしかできないレベルで、
自分の能力の無さを痛感しました・・・

最後の変数を定義するやり方が自分の考えている形ででは必要な気がしてきました。
今度は、その@iをプログラム側で取得する方法をまずは調べてみようと思います。

ただ、同時実行時の問題にもなりそうですね。
マシンAとマシンBからinsertがあった場合など・・・

しばらくはBooksOnlineとInternetでの調査でレベルアップを図ろうと思います。
ありがとうございます。

お礼日時:2005/01/25 06:07

オートナンバーと同様にIDENTITYを使います。


こんな感じです。

create table tbl
(retu int IDENTITY)

BooksOnline参照。
(なければ MS のサイトから落とす)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

IDENTITYを使うのですね。

>create table tbl
>(retu int IDENTITY)
・この一文は、テーブル作成時に、retuフィールドのIDENTITYプロパティを「はい」にするのと同じことなのでしょうか?

・C#からデータのInsertするときに、retuの最大値を持っているIDENTITYプロパティからデータを取得するのでしょうか?

どうも、ID自動生成とプログラムからの挿入操作と同時実行性について、BooksOnlineを見ただけでは、
それらの絡みがわからなかったので質問させていただきました。

お礼日時:2005/01/24 11:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報