使用 Microsoft 登入
登入或建立帳戶。
您好:
選取其他帳戶。
您有多個帳戶
選擇您要用來登入的帳戶。

徵兆

假設您使用的是 Microsoft SQL Server 2016 或 2017。 當您使用記憶體優化表格變數搭配存在語句 處理記憶體優化的資料交易時,可能會得到錯誤的結果。

例如:

步驟 1:建立記憶體優化的資料庫和資料表。

建立 DATABASE 示範

ALTER DATABASE demo ADD FILEGROUP demo_mod CONTAINS MEMORY_OPTIMIZED_DATA 

ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') TO FILEGROUP demo_mod 

使用示範

CREATE TYPE dbo.IN_MEMORY_TABLE_TYPE AS 表格]

( source_col INT Null,

target_col INT 而非 Null

INDEX ix_InMemoryTable NONCLUSTERED (target_col)

) WITH (MEMORY_OPTIMIZED = 開啟)

步驟 2:插入資料並更新資料。

DECLARE @t dbo。IN_MEMORY_TABLE_TYPE

INSERT @t ( source_col、target_col ) VALUES (10、0) 、 (0、0)

從 @t 選取 *

UPDATE r1 SET target_col = -1 FROM @t r1

WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )

SELECT * FROM @t

步驟 3:檢查結果。

實際結果:並非所有表格變數 @t 資料列都會更新。

source_col |target_col

----------------------

10 |-1

0 |0

預期的結果:所有資料列都應該更新為 target_col = -1

source_col |target_col

----------------------

10 |-1

0 |-1.

解決方案

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

      SQL Server 2017 的累積更新 1 

      SQL Server 2016 SP1 的累積更新 5

每個SQL Server的新累積更新都包含所有 Hotfix 以及先前累積更新隨附的所有安全性修正。 查看SQL Server的最新累積更新:

SQL Server 2017 的最新累積更新

2016 年 SQL Server 的最新累積更新

狀態

Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。

參考資料

瞭解 Microsoft 用來描述軟體更新的術語

需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

這項資訊有幫助嗎?

您對語言品質的滿意度如何?
以下何者是您會在意的事項?
按下 [提交] 後,您的意見反應將用來改善 Microsoft 產品與服務。 您的 IT 管理員將能夠收集這些資料。 隱私權聲明。

感謝您的意見反應!

×