已安裝的 Microsoft 資料存取元件 2.8 電腦上的應用程式會接收不正確的值為識別資料行從 SQL Server 2005 資料庫

文章翻譯 文章翻譯
文章編號: 940569 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

徵狀

考慮下列案例。您建立 Microsoft SQL Server 2005 資料庫中有識別資料行的資料表。您可以設定合併複寫資料表上。應用程式使用 Microsoft ActiveX 資料物件 (ADO) 資料表中插入資料列。然後,應用程式會擷取插入的資料列。不過,不正確的值會傳回為識別資料行。

當執行應用程式的電腦有安裝下列其中之一時,就會發生這個問題:
  • Windows Server 2003
  • Windows XP
  • Microsoft 資料存取元件 2.8 (MDAC 2.8)
在 Microsoft SQL Server 2000 資料庫中,不會發生這個問題。

發生的原因

複寫程序會在表格中建立插入觸發程序。插入觸發程序時資料就會在資料表中插入,使用 @ @ IDENTITY 而不是 SCOPE_IDENTITY 函式的變數。因此,@ @ IDENTITY 變數可能會傳回不在目前的資料表中的識別值。

解決方案

如果要解決這個問題,請下列 「 Microsoft 知識庫 」 文件中安裝所述的 Hotfix:
961451FIX: 您會收到不正確的值時插入資料至資料表,且包含識別資料行使用 ActiveX 資料物件的應用程式中使用用戶端資料指標之後,查詢最後插入的識別值
附註已在較早版本的本文 < 解決方案 > 一節所述的 Hotfix 是由 961451 所述的 Hotfix 所取代。

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。

其他相關資訊

SCOPE_IDENTITY 函式和 @ @ IDENTITY 變數會傳回在目前的工作階段中會產生任何資料表中的最後一個識別數值。不過,SCOPE_IDENTITY 函式會傳回目前的範圍內只會插入的值。@ @ IDENTITY 變數不會限制在特定範圍內插入。

比方說假設該資料庫包含一個 Table1 和一個 Table2。這兩個資料表具有識別資料行。插入觸發程序是在 Table1 中定義的。Table1 中插入一個資料列時, 觸發程序會在 Table2 插入資料列的複本。這種情況牽涉到下列兩種範圍:
  • 插入在 Table1
  • 插入 Table2 中由觸發程序
在本例 @ @ IDENTITY 變數和 SCOPE_IDENTITY 函式傳回不同值 Table1 中插入一個資料列時。@ @ IDENTITY 變數傳回在目前的活動中插入任何領域跨最後一個識別資料行值。在這裡 @ @ IDENTITY 變數傳回 Table2 中都會自動插入識別值。不過,SCOPE_IDENTITY 函數會傳回在 Table1,插入識別值因為 SCOPE_IDENTITY 函數會傳回上次插入相同範圍中的值。如果函式範圍內發生對識別資料行所做的任何 INSERT 陳述式之前叫用,SCOPE_IDENTITY 函式會傳回 NULL 值。

如需有關軟體更新術語的詳細資訊,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
824684用來描述 Microsoft 軟體更新標準術語的說明

屬性

文章編號: 940569 - 上次校閱: 2009年8月25日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition (家用版)
  • Microsoft Windows XP Professional x64 Edition
  • Microsoft Data Access Components 2.8
關鍵字:?
kbmt kbautohotfix kbwinxppresp3fix kbexpertiseinter kbwinserv2003postsp2fix kbbug kbfix kbhotfixserver kbqfe KB940569 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:940569
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com