T-Sql @@ Identity

Ita*_*y.B 6 t-sql identity

有人知道如何@@Identity在使用T-Sql时返回吗?

像这样的东西:

set @Sql = "insert into table....values()..."
exec @sql
return @@Identity
Run Code Online (Sandbox Code Playgroud)

Ken*_*Ken 7

看起来你的一个隐含要求是动态SQL的执行.虽然我建议不要这样做,但你可以用这个来完成你想要的东西:

set @Sql = 'insert into table....values()...; select SCOPE_IDENTITY()'
exec(@Sql)
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 5

Like this:

INSERT INTO Table(...)
OUTPUT INSERTED.IdColumn
VALUES(...)
Run Code Online (Sandbox Code Playgroud)


Joe*_*ite 3

INSERT INTO TableName (Field1, Field2, Field3) VALUES (1, 2, 3);
SELECT SCOPE_IDENTITY();
Run Code Online (Sandbox Code Playgroud)

这是一个多语句批处理,因此我不确定每个客户端库都会以相同的方式返回值;例如,在经典 ADO 中,您可能需要前进到下一个记录集才能读取该值。但如果您使用的是 ADO.NET,我知道您可以对上面的整个字符串使用ExecuteScalarSCOPE_IDENTITY ,它会很好地返回您的值。

注意:ADO.NET 将以 a 形式返回值decimal,而不是int您可能期望的那样。这是因为SCOPE_IDENTITY,无论出于何种原因, 都被键入为numeric(38,0)。因此,您要么需要在将 ExecuteScalar 结果转换为decimal之前将其转换为int,要么需要SELECT CAST(SCOPE_IDENTITY() AS INT)(假设您的 IDENTITY 字段是 INT,而不是某种更大的数字类型)。

  • 我**总是**使用 SCOPE_IDENTITY 而不是 @@IDENTITY (3认同)