Applies To
SQL Server 2016 Service Pack 1 SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 on Windows (all editions)

徵兆

假設您使用的是 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 用來描述軟體更新的術語

Need more help?

Want more options?

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