changetable (Transact-SQL)
Döndürür, bir tabloiçin izleme bilgileri değiştirin.Bu deyim , bir tablo için tüm değişiklikleri geri dönmek veya belirli bir satır için bilgi izleme değiştirmek için kullanabilirsiniz.
Sözdizimi
CHANGETABLE (
{ CHANGES table , last_sync_version
| VERSION table , <primary_key_values> } )
[AS] table_alias [ ( column_alias [ ,...n ] )
<primary_key_values> ::=
( column_name [ , ...n ] ) , ( value [ , ...n ] )
Bağımsız değişkenler
DEĞİŞİKLİKLER table , last_sync_version
Tarafından belirtilen sürüm yana oluşan tablo tüm değişiklikleri için bilgi izleme döndürür last_sync_version.table
Kullanıcı tanımlı tablo izlenen değişiklikleri elde edileceği'dır.' % S'tablo tabloüzerinde değişiklik izleme etkinleştirilmiş olması gerekir.Bir bir, iki, üç veya dört tablo adı kullanılır.tablo adı tabloveri türünün eşanlamlısı olabilir.last_sync_version
Değişiklikleri aldığında, çağıran uygulama değişiklikleri gerekli noktası belirtmeniz gerekir.Last_sync_version o noktayı belirtir.işlev sürümbu yana değiştirilen tüm satırlar için bilgi verir.Bir sürüm last_sync_version büyük değişiklikleri almak için uygulama sorgulanıyor.Uygulama değişiklikleri alır önce genellikle çağıracak CHANGE_TRACKING_CURRENT_VERSION() kullanılacak sürüm edinmek için saat gereklidir.Bu nedenle, yorumlamak ya da gerçek değerini anlamak uygulama yok.
Last_sync_version çağıran uygulama tarafından alınır, değer devam ettirmek uygulama vardır.Sonra uygulama bu değer kaybederse verileri yeniden gerekir.
.
last_sync_versionis bigint.skalerdeğer olmalıdır.ifade sözdizimi hatası neden olur.
Değer boş ise, tüm izlenen değişiklikler döndürülür.
last_sync_versionBazı veya tüm bilgilerini değiştirme veritabanı için yapılandırılmış saklama dönemi uyarınca temizlendiği olduğundan, çok eski değil sağlamak için doğrulanması gerekir.Daha fazla bilgi için, bkz. CHANGE_TRACKING_MIN_VALID_VERSION (Transact-SQL) ve alter database set seçenekleri (Transact-SQL).
Sürüm table, { <primary_key_values> }
Son değişiklik izleme bilgileri için belirtilen satır döndürür.Birincil anahtar değerleri satır tanımlamanız gerekir.<primary_key_values> birincil anahtar sütunları tanımlar ve değerleri belirtir.Birincil anahtar sütun adları, herhangi bir sırada belirtilebilir.Table
Kullanıcı tanımlı tablo değişiklik elde edileceği izleme bilgileri.' % S'tablo tabloüzerinde değişiklik izleme etkinleştirilmiş olması gerekir.Bir bir, iki, üç veya dört tablo adı kullanılır.tablo adı tabloveri türünün eşanlamlısı olabilir.column_name
Birincil anahtar sütun veya sütunları adını belirtir.Birden çok sütun adları, herhangi bir sırada belirtilebilir.Value
Birincil anahtardeğeridir.Birden çok birincil anahtar sütun varsa, sütun görünür gibi değerleri sırayla belirtilmelidir column_name listesi.
[OLARAK] table_alias( column_alias,...n ] ) ]
changetable tarafından döndürülen sonuçlar adlarını sağlar.table_alias
changetable tarafından döndürülen tablo diğer ad adı olur.table_aliasgerekli ve geçerli olmalıdır tanımlayıcısı.column_alias
İsteğe bağlı sütun diğer ad veya sütun diğer adları changetable tarafından döndürülen sütunlar listesi değil.Bu etkinleştirir, sütun adları durum da orada özelleştirilmiş sonuçlaryinelenen adlarıdır.
Dönüş Türleri
table
Dönüş değerleri
CHANGETABLE DEĞİŞİKLİKLERİ
DEĞİŞİKLİKLERİ belirtildiğinde aşağıdaki sütunlara sahip sıfır veya daha fazla satır döndürülür.
Sütun adı |
Veri türü |
Açıklama |
---|---|---|
SYS_CHANGE_VERSION |
bigint |
Satıra son değişikliği ile ilişkili sürüm değeri |
SYS_CHANGE_CREATION_VERSION |
bigint |
Son ile ilişkili sürüm değerleri işlemi ekleyin. |
SYS_CHANGE_OPERATION |
nchar(1) |
Değişikliğin türünü belirtir: U= Güncelleştirme I= Ekle D= Delete |
SYS_CHANGE_COLUMNS |
varbinary(4100) |
Temel sürümbu yana değişen sütunları listeler.
Not
Hesaplanan sütunlar, hiçbir zaman değiştirilmiş olarak listelenir.
Aşağıdaki koşullardan herhangi biri doğru olduğunda null değerdir:
|
SYS_CHANGE_CONTEXT |
varbinary(128) |
İsteğe bağlı olarak kullanarak belirtebilirsiniz bağlam bilgilerini değiştirme ile yan tümce INSERT, update veya delete deyimbir parçası olarak. |
<birincil anahtar sütun değeri> |
Aynı kullanıcı tablo sütunları |
İzlenen tabloiçin birincil anahtar değerleri.Bu değerler, kullanıcı tabloiçindeki her satırı benzersiz olarak tanımlamak. |
CHANGETABLE SÜRÜM
SÜRÜM değeri belirlendiğinde, aşağıdaki sütunları olan bir satır döndürülür.
Sütun adı |
Veri türü |
Açıklama |
---|---|---|
SYS_CHANGE_VERSION |
bigint |
Geçerli satır ile ilişkili sürüm değeri değiştirin. Bir değişiklik değişiklik saklama dönemi izleme uzun bir süre için yapılmış değil veya değişiklik izleme etkinleştirildikten sonra satır değiştirilmedi değer null olur. |
SYS_CHANGE_CONTEXT |
varbinary(128) |
İsteğe bağlı olarak bir ekleme, güncelleştirme, bir parçası olarak WITH yan tümce kullanarak belirtmek veya delete deyim, bağlam bilgileri değiştirin. |
<birincil anahtar sütun değeri> |
Aynı kullanıcı tablo sütunları |
İzlenen tabloiçin birincil anahtar değerleri.Bu değerler, kullanıcı tabloiçindeki her satırı benzersiz olarak tanımlamak. |
Açıklamalar
tabloüzerindeymiş changetable işlev , from yan tümce sorgunun içinde genellikle kullanılır.
CHANGETABLE(CHANGES...)
Yeni veya değiştirilmiş satır satır verileri birleştirmek sonuç kümesi için birincil anahtar sütunları kullanarak kullanıcı tablo elde edilir.Yalnızca bir satır döndürülür değiştirildi, kullanıcı tablo her satır için bu yana aynı satıra birden çok değişikliği olduğu bile last_sync_version değer.
Birincil anahtar sütun değişiklikleri asla güncelleştirmeler olarak işaretlenir.Birincil anahtar değeri değişirse, eski değeri bir delete ve INSERT yeni değeri olarak kabul edilir.
Satır silmek ve eski birincil anahtarolan bir satır ekleme, değişiklik sıradaki tüm sütunlar için bir güncelleştirme olarak görülür.
İçin döndürülen değerleri SYS_CHANGE_OPERATION ve SYS_CHANGE_COLUMNS sütunlarının olduğu belirtilen temel sürüm görelidir.Örneğin, bir ekleme işlemi sürüm 10 ve sürüm 15 güncelleştirme işlemi yaptıysanız ve temeli ise last_sync_version 12, bir güncelleştirme raporlanacak.last_sync_version Değeri 8, INSERT raporlanacak.SYS_CHANGE_COLUMNShiçbir zaman güncelleştirilen olarak hesaplanan sütunlar bildirir.
Genellikle, birleştirme deyimgibi eklemek, güncelleştirmek ya da kullanıcı tablolardaki verileri silmek, tüm işlemlerin izlenir.
Kullanıcı tablo verileri etkileyen aşağıdaki işlemlerin izlenir değildir:
updatetext deyimyürütme
Bu deyim önerilmiyor ve bir sonraki sürüm ' ün kaldırılacak SQL Server.Ancak, kullanarak yapılan değişiklikler .update deyim yan tümce izlenir YAZMAK.
truncate table kullanarak satır silme
Bir tablo kesilir, değişiklik izleme tabloüzerinde yalnızca etkinleştirilmiş olduğu gibi değişiklik izleme tablo ile ilişkili sürüm bilgileri sıfırlanır.Bir istemci uygulaması, her zaman son eşitlenmiş sürümdoğrulamanız gerekir.tablo kesildi, doğrulama başarısız olur.
CHANGETABLE(VERSION...)
Varolmayan bir birincil anahtar belirtilmişse, bir boş sonuç kümesi döndürülür.
Değeri SYS_CHANGE_VERSION bir değişiklik tutma süresinden uzun yapıldı değil, boş olabilir (örneğin, temizleme, değişiklik bilgisini kaldırdı) veya tabloiçin değişiklik izleme etkinleştirildikten sonra hiçbir zaman satır değiştirildi.
İzinler
Tarafından belirtilen tablo içinde aşağıdaki izinleri gerektirir table İzleme bilgilerini edinmek için değer:
Birincil anahtar sütunları üzerinde select izni
GÖRÜNÜM DEĞİŞİKLİK İZLEME
Örnekler
A.Bir ilk eşitleme için veri satırları döndüren
Aşağıdaki örnek, nasıl bir tablo veri ilk eşitleme için veri elde gösterir.Sorgu, tüm satır veri ve ilişkili sürümlerine döndürür.Sonra eklemek veya eşitlenmiş veri içeren sistem bu veri ekleyin.
-- 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 sürümbu yana yapılan tüm değişiklikleri listeleme
Aşağıdaki örnek tablo belirtilen sürüm bu yana yapılan tüm değişiklikleri listeler (@last_sync_version).[Emp ID]ve SSN Bileşik birincil anahtarsütunları olan.
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.Eşitleme için değişen tüm veri alma
Aşağıdaki örnek, nasıl değiştiğini tüm verileri elde edebilirsiniz gösterir.Bu sorgu, kullanıcı tablo bilgileri böylece kullanıcı tablo bilgilerini izleme Değiştir katılır.A LEFT OUTER JOIN , silinmiş satırlar için satır döndürdü kullanılır
-- 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(VERSION...) kullanarak çakışmaları algılama
Aşağıdaki örnek, yalnızca satırdaki son eşitlemeden sonra değişmemişse bir satır güncelleştirmek gösterilmiştir.Belirli satır sürüm numarasını kullanarak elde edilen CHANGETABLE.Satır güncelleştirildi, değişiklik yapılmamış ve sorgu satır en son değişiklik hakkında bilgi verir.
-- @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);