- - PR -
ユニークキー生成
1|2|3|4|5
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-05-11 12:45
こんにちは。
ASP.NET(VB) .NET Framework v1.1 テーブルの主キーがオートナンバーだけとなっているものがあって、 そこへレコードを追加した直後にそのレコードを取得したいのですが 主キーがオートナンバーで分からないため、レコードを取得出来ませ ん。レコードを取得できれば何の問題もないのですが。。。。 そこで、主キーをオートナンバーでなく、ユニークなキーにしよう、 と考えました。以前ColdFusionやJavaなどをかじった事がありまし て、ユニークなキーを自動で生成してくれるクラスが存在しました。 .NETでは、そのように自動でユニークなキーを生成してくれるクラス は存在するのでしょうか? ご存知の方がおられましたらよろしくお願い致します。 | ||||
|
投稿日時: 2005-05-11 13:07
SQLServerであれば、 INSERT INTO テーブル名 (列名) VALUES (値); SELECT * FROM テーブル名 WHERE (連番 = SCOPE_IDENTITY()) | ||||
|
投稿日時: 2005-05-11 13:11
はじめまして。
テーブルとは DataTable のことですか? DB側のテーブルのことですか? DataTableであれば、NewRow() するとローオブジェクトをもらえるので、オートナンバーにしておいたほうが簡単そうです。 DBテーブルの場合、SQL Serverしかわからないのですが、トリガなどで連鎖的なINSERTがされなければ、@@IDENTITYで最後のIDを参照できます。 自前でユニークなキーを、ということであれば、整数型にしておいて MAX(カラム)+1 とする手もありますし、GUIDを使う手もあります。どちらにしろ、トランザクションやユニーク性のチェックが必要となりそうですが・・・ | ||||
|
投稿日時: 2005-05-11 13:17
返信ありがとうございます。
>テーブルとは DataTable のことですか? DB側のテーブルのことですか? DB側のテーブルの事です。誤解を招くような書き方してすいませんでした。 todoさん、ほげたさんのおっしゃるようにIDENTITYを使用してみます。 本当にありがとうございました。 | ||||
|
投稿日時: 2005-05-11 13:18
todoさんのおっしゃるように、@@IDENTITYでなくSCOPE_IDENTITY()を使ったほうがよいですね。
失礼しました。 | ||||
|
投稿日時: 2005-05-11 13:46
どもです。がると申します。
んっと。言語フリーな発言になるのですが。 わたしは、よくユニークキーに、以下のようなものを使ってます。 # 数字と数値を一緒くたに扱ってますので言語によってはご注意のほどを # イメージはPerlです
実際には桁数をそろえたり(マイクロ秒で、0パディングしたりします)、 桁数が多いのでBASE64ちっくなエンコードをかけたりしていますが。 上記であれば、ほぼ確実にユニークなkeyが作成できます。 「それでも不安」な方は、threadでユニークなID、適当な桁数の乱数を 併用するって手もあります。 厳密にはINSERTでのチェックが必要とはいえ、上記で「実際に」keyが 重複したためしは一度もありません。 # マイクロ秒単位で処理がそろうこと自体が相当マレですし :-P 「いますでにあるクラス」を探すのもよいのですが、たまには自作も いかがでしょうか? などと時代に逆行するような発言で締めくくってみたり :-P | ||||
|
投稿日時: 2005-05-11 13:59
がるがるさん、返信ありがとうございます。
確かに独自のユニークキー作成クラスを作ることも考えました。 しかし、少し自信がなかったので今回は省きました。時間ある ときにでもやろうと思います。 貴重な情報ありがとうございます。 todoさん、ほげたさんのSCOPE_IDENTITYを使用し、一応実装 できました。思い通りに動いてくれています。 だけどこれって、もし別のマシンから同時にレコードが追加さ れた場合って大丈夫なんですかね?念のため、トランザクション かけた方がよさそうですね。 | ||||
|
投稿日時: 2005-05-11 14:31
SE卵さん、こんにちは。
お手元に SQL Server Books Online はありませんか? |
1|2|3|4|5
次のページへ»