KB4039776-修正:當您在 SQL Server 2016 或2017中使用含 [where exists] 語句的記憶體優化資料表時,不正確的行為

徵狀

假設您使用的是 Microsoft SQL Server 2016 或2017。 當您處理記憶體優化資料交易時,如果您使用的是含where 的 select 語句的記憶體優化資料表變數,您可能會收到錯誤的結果。

例如:

Step1:建立記憶體優化資料庫與資料表。

建立資料庫示範

ALTER DATABASE 示範新增 FILEGROUP demo_mod 包含 MEMORY_OPTIMIZED_DATA 

ALTER DATABASE 示範新增檔案(name = "demo_mod1",filename = "C:\DATA\ demo_mod1")到檔組 demo_mod 

使用示範

經過

建立類型 dbo。以表格方式 IN_MEMORY_TABLE_TYPE

(source_col INT Null,

target_col INT not Null

INDEX ix_InMemoryTable 非聚集(target_col)

) WITH (MEMORY_OPTIMIZED = 開啟)

經過

Step2:插入資料並更新資料。

宣告 @t dbo。IN_MEMORY_TABLE_TYPE

插入 @t (source_col,target_col)值(10,0),(0,0)

從 @t 中選取 [*]

從 @t r1 更新 r1 集 target_col =-1

WHERE 存在(在 r2.source_col > 0 的 @t r2 中選取 [*])

從 @t 中選取 [*]

經過

Step3:檢查結果。

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

source_col | target_col

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

10 |-1

0 |0

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

source_col | target_col

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

10 |-1

0 |sr-1.

解決方案

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

      SQL Server 2017 的累積更新1 

      SQL Server 2016 SP1 累積更新5

每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:

SQL Server 2017 的最新累計更新

SQL Server 2016 的最新累計更新

狀態

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

參考

瞭解 Microsoft 用於描述軟體更新的詞彙

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

Thank you for your feedback!

Thank you for your feedback! It sounds like it might be helpful to connect you to one of our Office support agents.

×