5

これが私のテーブルです。

Ticket(id int auto_increment,name varchar(50));

このテーブルに挿入した後、IDと名前をメールに送信したいのですが、最後に挿入された値を取得するにはどうすればよいですか。

これを解決するのに役立ちます...

4

4 に答える 4

9

調べてください:Scope_identity

SCOPE_IDENTITY()

そのテーブルからIdentityPropertyを持っているテーブルは、最後に挿入されたレコードIDを取得できます。

SELECT SCOPE_IDENTITY()

また

しかし、これは安全な手法ではありません。

SELECT MAX(Id) FROM Ticket

また

これも安全な手法ではありません。

SELECT TOP 1 Id FROM Ticket ORDER BY Id DESC
于 2012-09-25T11:26:02.563 に答える
4

SCOPE_IDENTITY()テーブルに最後に挿入された主キーの値を取得するために使用する必要があります。私はそれがID値であるべきだと思います。入手したら、SELECTこのIDを使用してください。

@@IDENTITYいくつかの違いもありますが、どちらかを使用すると、値が不正確になる可能性があります。

これらの詳細な記事で、より多くの洞察、それらの使用方法の詳細な説明、それらが異なる理由、およびいくつかのデモコードを確認してください。

于 2012-09-25T11:26:42.807 に答える
3

2008 R2 Service Pack1より前のSQLServerの場合(リンク):

SCOPE_IDENTITY()および@@ IDENTITYを使用すると、誤った値を受け取る場合があります

その場合、OUTPUT句が最も安全なメカニズムです。

DECLARE @InsertedRows AS TABLE (Id int)
DECLARE @NewId AS INT
INSERT INTO HumanResources.Employees
  ( /* column names */)
OUTPUT Inserted.Id INTO @InsertedRows
  VALUES (/* column values */)
SELECT @NewId = Id FROM @InsertedRows
于 2012-09-27T10:34:49.503 に答える
0

次のような自動インクリメントフィールドをテーブルに追加します。インデックス(INT、AUTO INCREEMENT)次に、挿入または実行される操作の前にc max(index)を取得して最後のレコードを取得します。

于 2018-06-06T19:27:30.457 に答える