ASP+SQLserver2000にて、構築しております。

レコードを挿入した直後に、最後に挿入したレコードのID(IDENTITY)を取得したいのですが、どのようにすれば良いでしょうか?

MySQLだと、LAST_INSERT_ID() 関数というのがあるようなのですが・・・。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:Chaborin No.1

回答回数189ベストアンサー獲得回数7

ポイント25pt

SCOPE_IDENTITY

または、

@@IDENTITYを使います。

http://sonic64.com/2005-05-23.html

IDENT_CURRENT / @@IDENTITY / SCOPE_IDENTITY の違い

ここに詳細な使用法の説明が書いてありますのでご参照まで。

id:ebagos

ありがとうございます。

スキル不足で申し訳ないのですが、使用法を見てもいまいち、よく分かりません.

ASPでの、具体的な使用例を教えてください。

よろしく、お願い致します。

2006/02/13 15:35:14
id:Chaborin No.2

回答回数189ベストアンサー獲得回数7

ポイント50pt

それでは責任持って・・・


ASPの場合はこうです:


別にCREATE TABLE文でTableを作っておきます:

CREATE TABLE AUTOINS (

ID_AUTO int IDENTITY (1, 1) NOT NULL ,

COLUMN1 varchar(50) NULL

)


次にASPでは下記のように取得します。


’----

Option Explicit

Dim db ’ADODB.Connection

Dim rs ’ADODB.Recordset

Dim strSQL ’SQL

Dim LastID ’最後に挿入したIDを入れる編数


’--DBのオープン

Set db = Server.CreateObject(”ADODB.Connection”)

db.open ([接続文字列]) ’--DBのオープン


’-- トランザクションの開始

db.begintrans


’-- テーブルの挿入

strSQL=”INSERT INTO AUTOINS (COLUMN1) VALUES (’TEST’)”

db.execute strSQL


’-- 最終IDの取得

strSQL = ”SELECT SCOPE_IDENTITY() as scope”

Set rs = Server.CreateObject(”ADODB.Recordset”)

Call rs.open(strSQL, db, 1, 0)

LastID = rs.fields(”scope”).value

rs.close

Set rs = Nothing


Response.write (”最後に挿入したID=” & LastID)


’-- Transactionのコミット

db.committran


’-- DBのクローズ

db.close

Set db = Nothing

’----


ポイントは、同じトランザクション内で取得することです。

(一番安全確実)


このコードは実際に動かしてるわけでないので、エラー等あったらすいません。

# あー現実逃避の極み...

id:ebagos

詳細な説明を頂きありがとうございました!

解決致しました!

2006/02/13 16:57:23

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません