可能重复:
Reason for using @@identity rather than scope_identity
当用户向表中添加记录时,我想返回要在插入后的页面中使用的记录的ID。我目前正在使用此命令(参见示例):
INSERT INTO tCRnames (fname, lname) VALUES ('Super','Man')
DECLARE @Id INT;
SET @Id = SCOPE_IDENTITY();
SELECT @Id;
关于这种方法我有两个问题。
此命令是否与会话相关?这意味着如果两个用户在同一时间插入记录,那么返回的ID是否会出现问题?
有没有更好的方法来返回插入的ID?目前我所有的ID都是正常的身份字段,这很好;但是我们正在考虑对我们的一些服务进行一些更改,这将使我们的ID字段不是标识字段。
然后,您将获得生成的ID,例如“TMP001-05”或“000004”。
如何从插入中返回插入的ID(除了在生成时返回它)?
答案 0 :(得分:1)
答案 1 :(得分:0)
我的理解是,您采用的方式是“最佳”方式,并将从当前事务中返回INSERTed行的ID 。
答案 2 :(得分:0)
请参阅http://msdn.microsoft.com/en-us/library/ms190315.aspx
上的文档SCOPE_IDENTITY 和@@ IDENTITY会返回 当前会话中的任何表 中生成的最后一个身份值。但是, SCOPE_IDENTITY 会返回仅在当前范围内插入的值; @@ IDENTITY不限于特定范围。
答案 3 :(得分:0)
它与当前会话+当前声明相关
答案 4 :(得分:0)
该值是会话的本地值,因此如果不同的用户同时添加记录,则没有问题。
如果没有自动生成id,那么您自己创建它,因此最简单的方法是挂起该值。您也可以使用output
从插入的记录中获取值,如RichardTheKiwi建议的那样。