レコードを挿入した直後に、最後に挿入したレコードのID(IDENTITY)を取得したいのですが、どのようにすれば良いでしょうか?
MySQLだと、LAST_INSERT_ID() 関数というのがあるようなのですが・・・。
http://msdn2.microsoft.com/ja-jp/library/ms190315.aspx
SCOPE_IDENTITY (Transact-SQL)
SCOPE_IDENTITY
または、
@@IDENTITYを使います。
http://sonic64.com/2005-05-23.html
IDENT_CURRENT / @@IDENTITY / SCOPE_IDENTITY の違い
ここに詳細な使用法の説明が書いてありますのでご参照まで。
それでは責任持って・・・
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
’----
ポイントは、同じトランザクション内で取得することです。
(一番安全確実)
このコードは実際に動かしてるわけでないので、エラー等あったらすいません。
# あー現実逃避の極み...
詳細な説明を頂きありがとうございました!
解決致しました!
ありがとうございます。
スキル不足で申し訳ないのですが、使用法を見てもいまいち、よく分かりません.
ASPでの、具体的な使用例を教えてください。
よろしく、お願い致します。