SQLで最後に更新したIDを取得するには?
これはInterSystems FAQ サイトの記事です。
LAST_IDENTITY() SQL関数を使用すると取得できます。
※ この関数は、埋め込み SQL または ODBC 利用時に使用できます。ダイナミック SQL、SQL シェル、または管理ポータルの SQL インタフェースによる値には設定されません。
簡単な埋め込み SQL での例をご紹介します。
Class Test.SQL
{
ClassMethod GetLastID() As %Integer [ SqlProc ]
{
//ソースコードコンパイル時に存在しないテーブルがあるので実行時にコンパイル
#SQLCompile Mode=Deferred
//テーブル作成
&sql(CREATE TABLE Sample.Students (
StudentName VARCHAR(30),
StudentAge INTEGER,
StudentID IDENTITY))
//データ登録
&sql(INSERT INTO Sample.Students (StudentName,StudentAge) values('生徒1',16))
&sql(INSERT INTO Sample.Students (StudentName,StudentAge) values('生徒2',17))
//最後に更新したIDを取得
&sql(SELECT LAST_IDENTITY() into :lastid from Sample.Students)
return lastid
}
}
{
ClassMethod GetLastID() As %Integer [ SqlProc ]
{
//ソースコードコンパイル時に存在しないテーブルがあるので実行時にコンパイル
#SQLCompile Mode=Deferred
//テーブル作成
&sql(CREATE TABLE Sample.Students (
StudentName VARCHAR(30),
StudentAge INTEGER,
StudentID IDENTITY))
//データ登録
&sql(INSERT INTO Sample.Students (StudentName,StudentAge) values('生徒1',16))
&sql(INSERT INTO Sample.Students (StudentName,StudentAge) values('生徒2',17))
//最後に更新したIDを取得
&sql(SELECT LAST_IDENTITY() into :lastid from Sample.Students)
return lastid
}
}
ストアドプロシージャとして実行した結果は以下の通りです(管理ポータルで実行しています)。
.png)
詳細は下記ドキュメントページもご参照ください。
LAST_IDENTITY【IRIS】
LAST_IDENTITY
ディスカッション (1)1
Comments
以下のように IDKey を指定している場合は
Property a As %String;
Property b As %String;
Index idx On (a, b) [ IdKey ];
LAST_IDENTITY は「文字列」になりますので、以下のように to_char をあわせて指定する必要があります。.png)