KB2950189 - 修正:在 SQL Server 中具有 DML 觸發程序的資料表上執行更新查詢時,發生存取衝突

套用到
SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

症狀

假設您在 Microsoft SQL Server 2008 R2、SQL Server 2012 或 SQL Server 2014 中有一個具有 SQL Server 觸發程序的資料表,並在該觸發程序中將插入/刪除的資料表與其他資料表聯結。 當您在此資料表上執行 DML 陳述式時,觸發程序編譯期間可能會發生存取違規,且您會收到下列錯誤:

注意

目前命令發生嚴重錯誤。 如果有結果,應丟棄。

此外,SQL Server 錯誤日誌中會記錄以下錯誤:

注意

<Date><Time> spid# ***Stack 傾印被傳送到 <FilePath>\SQLDumpxxx.txt
<Date><Time> spid# SqlDumpExceptionHandler: Process # generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server 正在終止此程序。
<日期><時間> spid# * *******************************************************************************
<日期><時間> spid# *
<Date><Time> spid# * BEGIN STACK DUMP:
<Date><Time> spid# * <Date><Time> spid#
<日期><時間> spid# *
<日期><時間> spid# *
<Date><Time> spid# * Exception address = 00000000009E4F2A 模組 (sqlservr+0000000002D4F2A)
<Date><Time> spid# * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION
<日期><時間> spid# * 發生存取違規寫入位址 000000000000000000
<日期><時間> spid# * 輸入緩衝區 510 位元組 -
<日期><時間> spid# * SQL_query_code

解決方式

此問題已先在下列 SQL Server 累積更新中修正。

SQL Server 2012 SP2 的累積更新 1 /zh-tw/help/2976982

2014 年 SQL Server 累積更新 2 /zh-tw/help/2967546

SQL Server 2012 SP1 的累積更新 10 /zh-tw/help/2954099

SQL Server 2008 R2 SP2 的累積更新 12 /zh-tw/help/2938478

關於 SQL Server 的累積更新

SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:

      

因應措施

若要解決此問題,請勿直接在將插入/刪除的資料表與其他資料表聯結的查詢中使用,請改將它快取在暫存資料表中,然後在查詢中使用暫存資料表。

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。