2011-02-17 102 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