Belirtiler
Kümelenmiş veya benzersiz dizini olan bir tabloda güncelleştirme çalıştırdığınızda ve güncelleştirme birincil olmayan benzersiz bir sütunda gerçekleştiğinde, değişiklik izleme kaydı güncelleştirme deyimiyle tutarsız olur.
Örneğin, "column1" adlı bir sütunun kümelenmiş veya benzersiz dizine dahil olduğunu varsayalım. Sütun değeri daha büyük bir değerden daha küçük bir değere değiştirildiğinde (değeri 20'den 16'ya değiştirmek gibi), değişiklik izleme yan tablosu silme işleminden önce ekleme işlemini alır. Örneğin, satır silme işleminden önce işlem günlüğü satır kaydı ekleme işlemi alınır veya "D" öncesinde "I" eklenir.
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19 |
I |
NULL |
NULL |
5639485628 |
1116 |
20 |
D |
NULL |
NULL |
5639485628 |
Sütun değeri daha küçük bir değerden daha büyük bir değere değiştirildiğinde (değeri 16'dan 20'ye değiştirmek gibi), "D" "I" öncesinde eklenir.
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1126 |
32 |
D |
NULL |
NULL |
5639485628 |
1126 |
33 |
I |
NULL |
NULL |
5639485628 |
Neden
Bu sorun, değişiklik izleme yan tablosundaki silme/ekleme çiftleri arasında yanlış sıralama nedeniyle oluşur.
Çözüm
Bu sorunun düzeltmesi, SQL Server için aşağıdaki güncelleştirmelere eklenmiştir:
SQL Server 2017 için Toplu Güncelleştirme 8
SQL Server 2016 Service Pack 1 için Toplu Güncelleştirme 9
SQL Server derlemeleri hakkında
SQL Server için her yeni derleme, önceki derlemedeki tüm düzeltmeleri ve güvenlik düzeltmelerini içerir. SQL Server için en son derlemeyi yüklemenizi öneririz:
SQL Server 2017 için en son toplu güncelleştirme
Durum
Microsoft bu sorunun "Uygulandığı öğe" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.
Daha fazla bilgi
Değişiklik izleme özelliği etkinleştirilmiş bir tablo için, benzersiz olarak tanımlanan birincil olmayan bir sütunda bir güncelleştirme gerçekleştiğinde, değişiklik izleme yan tablosuna iki girdi eklenir: Bölme eylemlerinin her biri için bir girdi, Ekle ve Sil.
Değişiklikleri listelemek için CHANGETABLE işlevi çağrıldığında, bu girişler birincil anahtar değerlerine göre sıralanır ve ardından işlemler toplanır. Güncelleştirme daha düşük bir değer eklerse, önce yan tabloda bir "I" işlemi ve ardından bir "D" işlemi çalıştırılır. Bu, bu satır için yanlış bir işlem döndürülür. Bunun nedeni "I" ve ardından "D" ifadesinin "D" olarak toplanmış olmasıdır.
Yan tablolarda yalnızca birincil anahtar değerleri korunduğu için iki ayrı giriş olması gerekmez. Birincil anahtar sütunu güncelleştirilmediği sürece bu durum geçerlidir.
Bu sorun, birincil olmayan benzersiz sütunlar için düzeltildi. Bu durumda, güncelleştirme gerçekleştiğinde, "D" ve "I" içeren iki girdi yerine güncelleştirme işlemi olarak "U" olmasıyla yalnızca bir satır eklenir.
Başvurular
Microsoft'un yazılım güncelleştirmelerini açıklamak için kullandığı terminoloji hakkında bilgi edinin.