Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
İadeler, bir tablo için takip bilgilerini değiştirir. Bu ifadeyi bir tablo veya belirli bir satır için değişiklik takip bilgisi için tüm değişiklikleri döndürmek için kullanabilirsiniz.
Transact-SQL söz dizimi kuralları
Sözdizimi
CHANGETABLE (
{ CHANGES <table_name> , <last_sync_version>
| VERSION <table_name> , <primary_key_values> }
, [ FORCESEEK ]
)
[AS] <table_alias> [ ( <column_alias> [ ,...n ] )
<primary_key_values> ::=
( <column_name> [ , ...n ] ) , ( <value> [ , ...n ] )
Arguments
DEĞIŞIKLIKLER table_name, last_sync_version
last_sync_version tarafından belirtilen sürümden bu yana bir tabloda gerçekleşen tüm değişiklikler için takip bilgilerini döndürür.
table_name
İzlenen değişikliklerin alınacağı kullanıcı tanımlı tablodur. Değişiklik takibi masada etkinleştirilmelidir. Bir, iki, üç veya dört bölümlü bir tablo adı kullanılabilir. Tablo adı, tablonun eşanlamlı bir özelliği olabilir.
last_sync_version
Nullable bigint skaler değeri. Bir ifade sözdizimi hatasına yol açar. Değer NULL ise, tüm takip edilen değişiklikler geri döner.
Değişiklikler elde ettiğinde, çağrı uygulaması değişikliklerin hangi noktadan gerekli olduğunu belirtmelidir.
last_sync_version o noktayı belirtir. Fonksiyon, o versiyondan sonra değiştirilen tüm satırlar için bilgi döndürür. Uygulama, last_sync_version'den büyük sürümde değişiklikleri almak için sorgu yapıyor.
Genellikle, değişiklikler almadan önce, uygulama bir sonraki değişiklik gerektiğinde kullanılacak sürümü almak için çağrı CHANGE_TRACKING_CURRENT_VERSION() yapar. Bu nedenle, uygulama gerçek değeri yorumlamak veya anlamak zorunda değildir.
last_sync_version çağıran uygulama tarafından elde edildiği için, uygulama bu değeri savurmak zorundadır. Uygulama bu değeri kaybederse, veriyi yeniden başlatması gerekir.
last_sync_version çok eski olmadığından emin olmak için doğrulanmalıdır, çünkü veritabanı için yapılandırılan tutma süresine göre bazı veya tüm değişiklik bilgileri temizlenmiş olabilir. Daha fazla bilgi için CHANGE_TRACKING_MIN_VALID_VERSION (Transact-SQL) ve ALTER DATABASE SET Options (Transact-SQL) bölümlerine bakınız.
VERSION table_name, { primary_key_values }
Belirli bir satır için en son değişiklik takip bilgilerini döndürür. Birincil anahtar değerler satırı tanımlamalıdır.
primary_key_values birincil anahtar sütunlarını tanımlar ve değerleri belirtir. Ana anahtar sütun adları herhangi bir sırayla belirtilebilir.
table_name
Değişiklik takip bilgisinin alınacağı kullanıcı tarafından tanımlanan tablodur. Değişiklik takibi masada etkinleştirilmelidir. Bir, iki, üç veya dört bölümlü bir tablo adı kullanılabilir. Tablo adı, tablonun eşanlamlı bir özelliği olabilir.
column_name
Ana anahtar sütun veya sütunların adını belirtir. Birden fazla sütun adı herhangi bir sırayla belirtilebilir.
value
Birincil anahtarın değeridir. Birden fazla ana anahtar sütunu varsa, değerler column_name listesinde sütunların göründüğü sırayla aynı sırayla belirtilmelidir.
[ FORCESEEK ]
Şunlar için geçerlidir: SQL Server (SQL Server 2016 (13.x) SP2 CU16, SQL Server 2017 (14.x) CU24 ve SQL Server 2019 (15.x) CU11 ile başlayarak), Azure SQL Database ve Azure SQL Managed Instance
Arama işleminin kullanılmasını zorunlu kılan isteğe bağlı parametre table_name. Çok az satır değiştiğinde, tarama işlemi yine de table_name erişim için kullanılabilir. Eğer bu bir tarama işlemi performans sorunu yaratıyorsa, parametreyi FORCESEEK kullanın.
[AS] table_alias [ (column_alias [ ,... n ] ) ] ]
CHANGETABLE tarafından döndürülen sonuçlar için isimler sağlar.
table_alias
CHANGETABLE tarafından döndürülen tablonun takma adıdır.
table_alias gereklidir ve geçerli bir tanımlayıcı olmalıdır.
column_alias
CHANGETABLE tarafından döndürülen sütunlar için isteğe bağlı bir sütun alias veya sütun alias listesidir. Bu, sonuçlarda tekrarlanan isimler varsa sütun isimlerinin özelleştirilmesini sağlar.
Dönüş Türleri
table
Dönüş Değerleri
DEĞIŞEBILIR DEĞIŞIKLIKLER
CHANGES belirtildiğinde, aşağıdaki sütunlara sahip sıfır veya daha fazla satır döner.
| Sütun adı | Veri türü | Description |
|---|---|---|
| SYS_CHANGE_VERSION | bigint | Satırdaki son değişiklikle ilişkili sürüm değeri |
| SYS_CHANGE_CREATION_VERSION | bigint | Son ekleme işlemiyle ilişkili sürüm değerleri. |
| SYS_CHANGE_OPERATION | nchar(1) | Değişiklik türünü belirtir: U = Güncelleme I = Ekle D = Sil |
| SYS_CHANGE_COLUMNS | varbinary(4100) | last_sync_version'dan bu yana değişen sütunları (baz) listeler. Hesaplanan sütunların asla değiştirilmiş olarak listelenmediğini unutmayın. Aşağıdaki koşullardan herhangi biri doğruysa, değer NULL'dur: Sütun değişim takibi etkin değil. Bu işlem, bir ekleme veya silme işlemidir. Tüm birincil olmayan anahtar sütunları tek bir işlemde güncellendi. Bu ikili değer doğrudan yorumlanmamalıdır. Bunun yerine, yorumlamak için CHANGE_TRACKING_IS_COLUMN_IN_MASK() kullanın. |
| SYS_CHANGE_CONTEXT | varbinary(128) | Bağlam bilgilerini INSERT, UPDATE veya DELETE ifadesinin parçası olarak WITH cümlesini kullanarak isteğe bağlı olarak belirleyebileceğiniz değişiklikleri yapabilirsiniz. |
| <birincil anahtar sütun değeri> | Kullanıcı tablosu sütunlarıyla aynı | İzlenen tablo için birincil anahtar değerler. Bu değerler, kullanıcı tablosundaki her satırı benzersiz şekilde tanımlar. |
DEĞIŞTIRILEBILIR VERSIYON
VERSION belirtildiğinde, aşağıdaki sütunlara sahip bir satır döner.
| Sütun adı | Veri türü | Description |
|---|---|---|
| SYS_CHANGE_VERSION | bigint | Satırla ilişkilendirilen mevcut değişiklik sürüm değeri. Eğer değişiklik takip tutma süresinden daha uzun bir süre yapılmadıysa veya değişiklik takibi etkinleştirildiğinden beri satır değiştirilmediyse, değer NULL'dur. |
| SYS_CHANGE_CONTEXT | varbinary(128) | Bağlam bilgilerini INSERT, UPDATE veya DELETE ifadesinin parçası olarak WITH cümlesini kullanarak isteğe bağlı olarak belirleyebileceğiniz değişiklikleri yapabilirsiniz. |
| <birincil anahtar sütun değeri> | Kullanıcı tablosu sütunlarıyla aynı | İzlenen tablo için birincil anahtar değerler. Bu değerler, kullanıcı tablosundaki her satırı benzersiz şekilde tanımlar. |
Açıklamalar
CHANGETABLE fonksiyonu genellikle bir sorgudaki FROM maddesinde bir tablo gibi kullanılır.
CHANGETABLE(CHANGES...)
Yeni veya değiştirilmiş satırlar için satır verisi elde etmek için, ana anahtar sütunlarını kullanarak sonuç kümesini kullanıcı tablosuna ekleyin. Kullanıcı tablosunda değiştirilen her satır için yalnızca bir satır döner; last_sync_version değerinden beri aynı satırda birden fazla değişiklik olmuş olsa bile.
Birincil anahtar sütun değişiklikleri asla güncelleme olarak işaretlenmez. Birincil anahtar değer değişirse, eski değerin silinmesi ve yeni değerin eklenmesi olarak kabul edilir.
Bir satırı siler ve eski ana anahtara sahip bir satır eklerseniz, bu değişiklik satırdaki tüm sütunlara güncelleme olarak görülür.
ve SYS_CHANGE_COLUMNS sütunları için döndürülen SYS_CHANGE_OPERATION değerler, belirtilen baz çizgisine (last_sync_version) görecelidir. Örneğin, bir ekleme 10 işlemi sürümünde yapılmışsa, 15güncelleme işlemi sürümünde yapılmışsa ve temel last_sync_version12ise bir güncelleme rapor edilir.
Eğer last_sync_version değeri 8ise bir ekleme rapor edilir.
SYS_CHANGE_COLUMNS hesaplanan sütunların güncellendiğini asla bildirmez.
Genellikle, kullanıcı tablolarına veri ekleme, güncelleme veya silme işlemleri, MERGE ifadesi dahil olmak üzere takip edilir.
Kullanıcı tablosu verilerini etkileyen aşağıdaki işlemler takip edilmez:
İfadeyi
UPDATETEXTyürütüyor. Bu ifade kullanımdan kaldırılmıştır ve SQL Server'ın gelecekteki bir sürümünde kaldırılacaktır. Ancak, UPDATE ifadesinin maddesi kullanılarak.WRITEyapılan değişiklikler takip edilir.Satır silme ile
TRUNCATE TABLE. Bir tablo kesildiğinde, tabloya bağlı değişiklik takip sürüm bilgisi, sanki değişiklik takibi yeni etkinleştirilmiş gibi sıfırlanır. Bir istemci uygulaması her zaman son senkronize edilmiş versiyonunu doğrulamalıdır. Doğrulama tablo kısaltıldıysa başarısız olur.
CHANGETABLE (VERSIYON...)
Var olmayan bir birincil anahtar belirtilirse boş bir sonuç kümesi döner.
SYS_CHANGE_VERSION Değeri, bir değişiklik tutma süresinden daha uzun süre yapılmadıysa (örneğin, temizleme değişiklik bilgisini kaldırdıysa) veya tablo için değişiklik takibi etkinleştirildiğinden beri satır hiç değiştirilmediyse NULL olabilir.
Permissions
Değişiklik takip bilgisi elde etmek için birincil anahtar sütunları ve VIEW CHANGE TRACKINGtable_name> değeriyle< belirtilen tablodaki izin gereklidirSELECT.
Örnekler
A. Verilerin ilk senkronizasyonu için satır döndürme
Aşağıdaki örnek, tablo verilerinin ilk senkronizasyonu için verilerin nasıl alınacağını gösterir. Sorgu, tüm satır verilerini ve ilgili sürümlerini döndürür. Sonra bu veriyi senkronize edilmiş verileri içeren sisteme ekleyebilir veya ekleyebilirsiniz.
-- Get all current rows with associated version
SELECT e.[Emp ID], e.SSN, e.FirstName, e.LastName,
c.SYS_CHANGE_VERSION, c.SYS_CHANGE_CONTEXT
FROM Employees AS e
CROSS APPLY CHANGETABLE
(VERSION Employees, ([Emp ID], SSN), (e.[Emp ID], e.SSN)) AS c;
B. Belirli bir sürümden sonra yapılan tüm değişiklikleri listelemek
Aşağıdaki örnek, belirtilen sürümden (@last_sync_version). [EMP ID] ve SSN, bileşik birincil anahtarda sütunlardır.
DECLARE @last_sync_version bigint;
SET @last_sync_version = <value obtained from query>;
SELECT [Emp ID], SSN,
SYS_CHANGE_VERSION, SYS_CHANGE_OPERATION,
SYS_CHANGE_COLUMNS, SYS_CHANGE_CONTEXT
FROM CHANGETABLE (CHANGES Employees, @last_sync_version) AS C;
C. Senkronizasyon için tüm değişen verilerin elde edilmesi
Aşağıdaki örnek, değişen tüm verileri nasıl elde edebileceğinizi gösterir. Bu sorgu, değişiklik takip bilgilerini kullanıcı tablosuyla birleştirerek kullanıcı tablosu bilgilerinin geri dönmesini sağlar. A LEFT OUTER JOIN kullanılır, böylece silinmiş satırlar için bir satır döner.
-- Get all changes (inserts, updates, deletes)
DECLARE @last_sync_version bigint;
SET @last_sync_version = <value obtained from query>;
SELECT e.FirstName, e.LastName, c.[Emp ID], c.SSN,
c.SYS_CHANGE_VERSION, c.SYS_CHANGE_OPERATION,
c.SYS_CHANGE_COLUMNS, c.SYS_CHANGE_CONTEXT
FROM CHANGETABLE (CHANGES Employees, @last_sync_version) AS c
LEFT OUTER JOIN Employees AS e
ON e.[Emp ID] = c.[Emp ID] AND e.SSN = c.SSN;
D. CHANGETABLE(VERSİYON...) kullanılarak çatışmaları tespit etmek
Aşağıdaki örnek, satır son senkronizasyondan bu yana değişmemişse bir satırın nasıl güncelleneceğini gösterir. Belirli satırın sürüm numarası kullanılarak CHANGETABLEelde edilir. Satır güncellendiyse, değişiklik yapılmaz ve sorgu, satırdaki en son değişikliğe dair bilgi döndürür.
-- @last_sync_version must be set to a valid value
UPDATE
SalesLT.Product
SET
ListPrice = @new_listprice
FROM
SalesLT.Product AS P
WHERE
ProductID = @product_id AND
@last_sync_version >= ISNULL (
(SELECT CT.SYS_CHANGE_VERSION FROM
CHANGETABLE(VERSION SalesLT.Product,
(ProductID), (P.ProductID)) AS CT),
0);
Ayrıca Bkz.
Değişiklik İzleme İşlevleri (Transact-SQL)
Veri Değişikliklerini İzleme (SQL Server)
CHANGE_TRACKING_IS_COLUMN_IN_MASK (Transact-SQL)
CHANGE_TRACKING_CURRENT_VERSION (Transact-SQL)
CHANGE_TRACKING_MIN_VALID_VERSION (En az geçerli sürüm) (Transact-SQL)