我有一个相对简单的存储过程,它运行一个插入,然后尝试返回最后插入的ID。这样做我可以通过SCOPE_IDENTITY()获取ID。这对我很有用。但后来我得到的报告是,在某些机器上,存储过程会导致重复的结果。
经过调查,我发现原因是使用了ReturnRecords属性。如果为true,它将运行两次查询!对于选择;谁在乎。但是对于这种情况,它会在我的数据库中造成重复。
将ReturnsRecords设置为false可以解决问题,但是它会破坏存储过程的目的(我绝对必须为记录获取正确的最后插入ID)!
我的问题很简单:在解决这个问题的同时,我将如何插入此记录并获取新记录的ID?
其他信息:
感谢任何帮助或见解。
答案 0 :(得分:1)
过程中的一个参数可以设置为输出。仍然不返回任何行,但将该参数的值设置为Scope_Identity()
create proc ReturnTheNewID
@NewValue int
, @ReturnNewID int output
as
set nocount on
insert ....
set @ReturnNewID = Scope_identity()