2011-02-17 72 views
1

我有一个相对简单的存储过程,它运行一个插入,然后尝试返回最后插入的ID。这样做是为了让我可以通过SCOPE_IDENTITY()获得ID。这对我很好。但之后,我得到了一些报告,在某些机器上,存储的proc会导致重复的结果。MS Access中存储过程引起的返回记录(accdb)

调查后,我发现原因是使用了属性ReturnsRecords。如果为true,它将运行一次查询两次!对于选择;谁在乎。尽管如此,它会导致我的数据库中出现重复。

设置ReturnsRecords为false可以摆脱这个问题,但它会破坏存储过程的目的(我绝对必须获取正确的最后插入的ID)。

我的问题是这样的:我将如何去插入此记录并获取新记录的ID,同时解决此问题?

附加信息:

  • 我目前使用DAO
  • 我已经试过ADO.Command方法,但它是 很容易出错,而且似乎并不 工作,输出参数为我。
  • 我使用存储过程仅用于保留范围。我没有心思使用存储过程。我只需要一个可靠的方法来获取最后插入的行的ID。
  • 这是一个ACCDB
  • 这是发生在2007年访问
  • 我的数据库后端是MSSQL Server 2008的

任何帮助或洞察力的赞赏。

回答

1

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

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

set nocount on 

insert .... 

set @ReturnNewID = Scope_identity() 
+0

这是它目前是如何工作的,只是当我尝试使用输出参数,我得到的多步OLE-DB的错误。我将如何去检索输出值? – Dan 2011-02-17 21:25:47

相关问题