SQL Server CEを使用している場合、最後に挿入されたIDを取得する方法はありますか? 2つのテーブルがあり、新しいレコードが作成されたときに、2番目のテーブルにIDを保存できるようにしたい。最後に挿入されたIDを取得
4
A
答えて
5
:
SELECT TOP 1 id FROM your_table ORDER BY id DESC
か:id
の高い値を仮定し
1
使用このクエリ:
INSERT INTO Persons (FirstName) VALUES ('Joe');
SELECT ID AS LastID FROM Persons WHERE ID = @@Identity;
や詳細はこのリンクを表示することができます。 http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/
12
SELECT @@IDENTITY
は、SQL Serverの最後の自動生成されたID値を取得します。私は、この例ではあなたを助けることを願っています
SELECT MAX(id) FROM your_table
2
はどの程度、常に新しいです。
INSERT INTO jobs (job_desc,min_level,max_level) VALUES ('A new job', 25, 100);
SELECT job_id FROM jobs WHERE job_id = @@IDENTITY;
-1
これは私のための可能な同時実行の問題を考慮していない
SELECT TOP (1) your_id FROM your_table ORDER BY your_id DESC
+0
これはうまくいくかもしれませんが、承認された回答よりもはるかに遅いです。 –
+0
また、Brisslesの答えの最初のコメントに書かれているような、同時実行性の問題を考慮していないと思います。 – VoidKing
をうまく働きました。 'SELECT MAX(id)'が別のレコードが挿入される前に実行されることを期待して競合状態を導入しています。 'SCOPE_IDENTITY()'はSQL CEではサポートされていないので、 '@@ Identity'と一緒に行きます。 –
@@ Identityは、selectが同じセッションで実行されていることを前提としています。それは事件のOPからはっきりしていないので、私はこれが与えられた情報のためのより良い答えだと思う。 –