由ReturnRecords(accdb)引起的MS Access中的存储过程问题

时间:2011-02-17 19:39:49

标签: sql-server tsql ms-access vba access-vba

我有一个相对简单的存储过程,它运行一个插入,然后尝试返回最后插入的ID。这样做我可以通过SCOPE_IDENTITY()获取ID。这对我很有用。但后来我得到的报告是,在某些机器上,存储过程会导致重复的结果。

经过调查,我发现原因是使用了ReturnRecords属性。如果为true,它将运行两次查询!对于选择;谁在乎。但是对于这种情况,它会在我的数据库中造成重复。

将ReturnsRecords设置为false可以解决问题,但是它会破坏存储过程的目的(我绝对必须为记录获取正确的最后插入ID)!

我的问题很简单:在解决这个问题的同时,我将如何插入此记录并获取新记录的ID?

其他信息:

  • 我目前正在使用DAO
  • 我尝试过ADO.Command方法,但确实如此 很容易出错,似乎没有 为我工作输出参数。
  • 我仅仅是为了保留范围而使用存储过程。我没有让我的心脏使用存储过程。我只需要一种可靠的方法来获取最后插入行的id。
  • 这是一个ACCDB
  • 这在2007年的访问中发生。
  • 我的数据库后端是MSSQL Server 2008

感谢任何帮助或见解。

1 个答案:

答案 0 :(得分:1)

过程中的一个参数可以设置为输出。仍然不返回任何行,但将该参数的值设置为Scope_Identity()

create proc ReturnTheNewID 
  @NewValue int
  , @ReturnNewID int output
as

set nocount on

insert ....

set @ReturnNewID = Scope_identity()