SQL Server 2019:选择刚刚插入的行

Mik*_*e97 1 sql-server

我有一个 id 设置为 Primary_key/is_identity 的表,所以我想知道是否可以假设使用相反顺序查找SELECT TOP 1刚刚插入的BEGIN TRANSACTION行的正确性:COMMIT TRANSACTION

BEGIN TRANSACTION

INSERT INTO [MyTable] ([description], [name])
VALUES ('animal', 'cat')

SELECT TOP (1) [id], [description], [name]
FROM [MyTable]
ORDER BY [id] DESC

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

考虑到上述限制和交易指令,这总是正确的吗?

Aar*_*and 5

不,您不能依赖于获取您插入的行,因为其他人可能在您插入行之后但在您选择之前TOP (1)插入了一行,是的,即使在事务内也是如此。在高并发情况下,除非您使事务可序列化,否则这将导致眼泪。但这是不必要的,因为您始终可以使用表获取插入的行:inserted

INSERT INTO dbo.MyTable ([description], [name])
OUTPUT inserted.id, inserted.description, inserted.name
VALUES ('animal', 'cat');
Run Code Online (Sandbox Code Playgroud)

对于单行插入,是的,您可以使用SCOPE_IDENTITY(),但OUTPUT适用于单行和多行插入。