您目前已離線,請等候您的網際網路重新連線

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

Windows XP 支援已結束

Microsoft 於 2014 年 4 月 8 日結束對 Windows XP 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

Windows Server 2003 的支援已於 2015 年 7 月 14 日結束

Microsoft 已於 2015 年 7 月 14 日結束對 Windows Server 2003 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本: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 - 最後檢閱時間:08/25/2009 16:09:56 - 修訂: 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
意見反應