Aracılığıyla paylaş


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.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

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.

NotNot
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:

  • Sütun değişiklik izlemenin etkin değil.

  • Ekleme ya da silme işlemi işlemdir.

  • Tek bir işlemle tüm nonprimary anahtar sütunları güncelleştirildi.Bu ikili değerini doğrudan değerlendirilmemelidir.Bunun yerine, onu yorumlamak için kullanmak CHANGE_TRACKING_IS_COLUMN_IN_MASK().

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);