Belirtiler
Microsoft SQL Server 2016 veya 2017 kullandığınızı varsayalım. Where exists deyimiyle bellek için iyileştirilmiş tablo değişkenlerini kullanarak bellek için iyileştirilmiş veri işlemlerini işlerken yanlış bir sonuç alabilirsiniz.
Örneğin:
Adım1: Bellek için iyileştirilmiş bir veritabanı ve tablo oluşturun.
VERITABANı oluşturma tanıtımı
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
Tanıtım'a bakın
Git
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE AS TABLE
( INT NULL source_col,
TARGET_COL INT NULL değil
İNDİS ix_InMemoryTable DÜZENSİz (target_col)
) WITH (MEMORY_OPTIMIZED = ON)
GO
Adım2: Veri ekleme ve verileri güncelleştirme.
Dbo @t BILDIRIN. IN_MEMORY_TABLE_TYPE
INSERT @t ( source_col, target_col ) DEĞERLER (10, 0),(0, 0)
@t *'yi seçin
UPDATE r1 SET target_col = -1 FROM @t r1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
SELECT * FROM @t
GO
Adım3: Sonuçları denetleyin.
Gerçek Sonuçlar: Tablo değişkeninin tüm satırları güncelleştirilmez @t .
source_col | target_col
----------------------
10 | -1
0 | 0
Beklenen sonuçlar: Tüm satırlar target_col = -1 olacak şekilde güncelleştirilmelidir.
source_col | target_col
----------------------
10 | -1
0 | -1.
Çözüm
Bu sorun, SQL Server için aşağıdaki toplu güncelleştirmelerde düzeltildi:
SQL Server için her yeni toplu güncelleştirme, önceki toplu güncelleştirmede yer alan tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. SQL Server için en son toplu güncelleştirmelere göz atın:
Durum
Microsoft bu sorunun "Uygulandığı öğe" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.
Başvurular
Microsoft'un yazılım güncelleştirmelerini açıklamak için kullandığı terminolojihakkında bilgi edinin.