有人知道在使用T-Sql时如何返回@@Identity
吗?
类似于这样:
set @Sql = "insert into table....values()..."
exec @sql
return @@Identity
有人知道在使用T-Sql时如何返回@@Identity
吗?
类似于这样:
set @Sql = "insert into table....values()..."
exec @sql
return @@Identity
看起来你的一个隐含需求是执行动态SQL。虽然我建议不要这样做,但你可以通过以下方法实现你想要的效果:
set @Sql = 'insert into table....values()...; select SCOPE_IDENTITY()'
exec(@Sql)
像这样:
INSERT INTO Table(...)
OUTPUT INSERTED.IdColumn
VALUES(...)
insert into tab (x,y,z) values (a,b,c); select @@identity
INSERT INTO TableName (Field1, Field2, Field3) VALUES (1, 2, 3);
SELECT SCOPE_IDENTITY();
SCOPE_IDENTITY
值。decimal
,而不是像你期望的那样的 int
。这是因为,由于某种原因,SCOPE_IDENTITY
的类型为 numeric(38,0)
。因此,你需要在将 ExecuteScalar 结果转换为 int
之前将其转换为 decimal
,或者你需要执行 SELECT CAST(SCOPE_IDENTITY() AS INT)
(假设你的 IDENTITY 字段是 INT,而不是一些更大的数值类型)。SCOPE_IDENTITY
,但看起来你是对的。经过几分钟的浏览,似乎需要一些奇特的情况(比如INSERT触发器在其他表中进行更多的INSERT)才能使@@IDENTITY
出错;但是,你是对的,SCOPE_IDENTITY
是正确的方法。我已经更新了我的答案。 - Joe White你可以使用这个
Insert into Table(Col2, Col3)
output inserted.Id
values ('xyz', 'abc')
其中Id
是您的标识字段