Udostępnij za pośrednictwem


CHANGETABLE (Transact-SQL)

Zwraca zmienić informacje o śledzeniu dla tabela.Za pomocą tej instrukcja zwrócić wszystkie zmiany dla tabela lub zmiana informacji dla określonego wiersza śledzenia.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • ZMIANY table , last_sync_version
    Zwraca śledzenie informacji dla wszystkich zmian do tabela , które nastąpiły od wersja jest określany przez last_sync_version.

    • table
      Jest zdefiniowane przez użytkownika tabela , na której uzyskania prześledzone zmiany.Musi być włączone śledzenie zmian w tabela.Jedno-, dwu-, trzy- lub nazwa czteroczęściowym identyfikatorem tabela może służyć.Nazwa tabela może być synonim do tabela.

    • last_sync_version
      Aplikacja wywołująca uzyska zmiany, należy określić punkt, z którego są wymagane zmiany.Last_sync_version Określa, że punkt.funkcja zwraca informacje dla wszystkich wierszy, które zostały zmienione od tej wersja.Aplikacja jest kwerenda do otrzymywania zmian wersja większe niż last_sync_version.

      Zazwyczaj, zanim uzyska zmian, wniosek będzie wywoływać CHANGE_TRACKING_CURRENT_VERSION() wersja , która będzie używana do uzyskiwania następnej zmiany czas są wymagane.W związku z tym aplikacja nie ma zinterpretować lub zrozumieć wartości rzeczywistej.

      Ponieważ last_sync_version jest uzyskiwana przez aplikacji wywołującej, aplikacja ma pozostać wartość.Jeśli aplikacja straci tę wartość, a następnie należy ponownie zainicjować danych.

      .

      last_sync_versionis bigint.Wartość musi być wartość skalarna.wyrażenie spowoduje błąd składni.

      Jeżeli wartością jest NULL, zwracane są wszystkie prześledzone zmiany.

      last_sync_versionpowinny zostać zatwierdzone w celu zapewnienia, że nie jest zbyt stara, ponieważ niektóre lub wszystkie zmiany informacji może mieć został oczyszczony zgodnie z okresu przetrzymania skonfigurowany dla bazy danych.Aby uzyskać więcej informacji, zobacz CHANGE_TRACKING_MIN_VALID_VERSION (Transact-SQL) i ZMIENIA opcje zestawu bazy danych (Transact-SQL).

  • Wersja table, { <primary_key_values> }
    Zwraca najnowszych informacji dla określonego wiersza śledzenia zmian.Wartości klucz podstawowego należy określić wiersz.<primary_key_values> identyfikuje kolumny klucz podstawowego i określa wartości.Nazwykolumna kluczpodstawowego można określić w dowolnej kolejności.

    • Table
      Jest zdefiniowane przez użytkownika tabela , na której uzyskania zmiany informacji śledzenia.Musi być włączone śledzenie zmian w tabela.Jedno-, dwu-, trzy- lub nazwa czteroczęściowym identyfikatorem tabela może służyć.Nazwa tabela może być synonim do tabela.

    • column_name
      Określa nazwę kluczpodstawowego,kolumna lub kolumn. Można określić wiele nazw kolumna w dowolnej kolejności.

    • Value
      Wartość kluczpodstawowego.W przypadku wielu kolumn klucz podstawowego wartości muszą być określone w tej samej kolejności, jak kolumny pojawiają się w column_name listy.

  • [W] table_alias( column_alias,...n ] ) ]
    Zawiera nazwy dla wyniki , które są zwracane przez CHANGETABLE.

    • table_alias
      Jest to nazwa alias tabela jest zwracany przez CHANGETABLE.table_aliasjest wymagana i musi być prawidłową identyfikatora.

    • column_alias
      Jest to opcjonalne kolumna alias lub Lista aliasów kolumna dla kolumn, które są zwracane przez CHANGETABLE.Nazwy kolumna umożliwia dostosowane w przypadek są zduplikowane nazwy w wyniki.

Zwracane typy

table

Zwracanie wartości

CHANGETABLE ZMIANY

Po określeniu zmiany zero lub więcej wierszy, które zawierają następujące kolumny są zwracane.

Nazwa kolumny

Typ danych

Opis

SYS_CHANGE_VERSION

bigint

Wersja wartość, która jest skojarzona z ostatniej zmiany do wiersza

SYS_CHANGE_CREATION_VERSION

bigint

Wartości wersji, które są skojarzone z ostatniej operacji wstawiania.

SYS_CHANGE_OPERATION

nchar(1)

Określa typ zmiany:

U= Aktualizacji

I= Wstaw

D= Usuń

SYS_CHANGE_COLUMNS

varbinary(4100)

Wyświetla listę kolumn, które uległy zmianie od linii bazowej wersja.

UwagaUwaga:
Kolumny obliczane nigdy nie są wyświetlane jako zmienione.

Wartość jest NULL, gdy jest spełniony jeden z następujących warunków:

  • Śledzenie zmian w kolumnie nie jest włączona.

  • Operacja jest operacją insert lub delete.

  • Wszystkie kolumny klucz nonprimary zostały zaktualizowane w jednej operacji.Nie można zinterpretować bezpośrednio ta wartość binarna.Zamiast tego należy je interpretować za pomocą CHANGE_TRACKING_IS_COLUMN_IN_MASK().

SYS_CHANGE_CONTEXT

varbinary(128)

Zmienianie informacji kontekstowych, które można opcjonalnie określić za pomocą zwklauzula INSERT, UPDATE lub DELETE instrukcjaw ramach.

<wartośćkolumna kluczpodstawowego >

Tak samo jak kolumny tabela użytkowników

Wartości klucz podstawowego tabelaprześledzone.Te wartości jednoznacznie identyfikują każdy wiersz w tabelaużytkowników.

WERSJA CHANGETABLE

Określona wersja zwracana jest jeden wiersz, który zawiera następujące kolumny.

Nazwa kolumny

Typ danych

Opis

SYS_CHANGE_VERSION

bigint

Bieżące zmienić wartość wersja , który jest skojarzony z wierszem.

Wartość jest NULL, jeśli zmiana nie została dokonana przez okres dłuższy niż okres zachowywania zmian lub wiersza nie zostały zmienione od czasu włączenia śledzenia zmian.

SYS_CHANGE_CONTEXT

varbinary(128)

Zmień informacje kontekstowe, że można opcjonalnie określić przy użyciu w klauzula INSERT, UPDATE, w ramach lub instrukcjaDELETE.

<wartośćkolumna kluczpodstawowego >

Tak samo jak kolumny tabela użytkowników

Wartości klucz podstawowego tabelaprześledzone.Te wartości jednoznacznie identyfikują każdy wiersz w tabelaużytkowników.

Uwagi

CHANGETABLE funkcja jest zazwyczaj używany w klauzula FROM kwerendy, tak jakby był on tabela.

CHANGETABLE(CHANGES...)

Aby uzyskać dane wiersza nowych lub zmodyfikowanych wierszy łączyć zestaw wyników użytkownika tabela przy użyciu kolumn klucz podstawowego.Tylko jeden wiersz jest zwracana dla każdego wiersza w tabela użytkownika, który zmienił, nawet jeśli zostały wielu zmian w tym samym wierszu od last_sync_version wartości.

Zmianykolumna kluczpodstawowego nigdy nie są oznaczone jako aktualizacje. Zmienia wartość klucz podstawowego, uważa się za usuń starą wartość i Wstaw nową wartość.

Jeśli usuwanie wiersza, a następnie wstawić wiersz, który ma stary kluczpodstawowy, zmiana jest postrzegane jako aktualizacji do wszystkich kolumn w wierszu.

Wartości, które są zwracane dla SYS_CHANGE_OPERATION i SYS_CHANGE_COLUMNS kolumny są względem linii bazowej wersja określonego.Na przykład wykonano operację wstawiania w wersja 10 i operacji aktualizacji w wersja 15 i linia bazowa jest last_sync_version 12, aktualizacja zostanie zgłoszony.Jeśli last_sync_version wartość 8, będą raportowane wstawkę.SYS_CHANGE_COLUMNSnigdy nie zgłosi kolumny obliczane jako posiadające zostały zaktualizowane.

Ogólnie rzecz biorąc wszystkie operacje wstawiania, aktualizacji lub usuwania danych w tabelach użytkownika są śledzone, łącznie z korespondencji seryjnej instrukcja.

Nie są śledzone następujące operacje, które wpływają na dane tabela użytkowników:

  • Wykonywania UPDATETEXT instrukcja

    Ta instrukcja jest niezalecane i zostaną usunięte w przyszłej wersja programu SQL Server.Jednak zmiany wprowadzone przy użyciu .Zapisu są śledzone w klauzula UPDATE instrukcja .

  • Usuwanie wierszy za pomocą OBCIĄĆ tabelę

    Gdy tabela jest obcięty, zmian informacji o wersja , która jest skojarzona z tabela jest resetowany tak, jakby na tabelawłaśnie zostały włączone śledzenie zmian.Aplikacja klient zawsze należy sprawdzić jego ostatnio zsynchronizowane wersja.Sprawdzanie poprawności nie powiedzie się, jeśli tabela została obcięta.

CHANGETABLE(VERSION...)

Pusty zestaw wyników jest zwracana, jeśli określono nieistniejący klucz podstawowego.

Wartość SYS_CHANGE_VERSION może być NULL, jeśli zmiana nie została dokonana dłuższy niż okres przechowywania (na przykład, oczyszczanie usunięto informacje o zmianach) lub wiersza nigdy nie zostały zmienione od czasu włączenia oledzenia zmian dla tabela.

Uprawnienia

Wymaga następujących uprawnień na tabela określonej przez table wartość, aby uzyskać informacje o śledzeniu zmian:

  • Zaznacz uprawnienie do kolumny klucz podstawowego

  • WIDOK ŚLEDZENIA ZMIAN

Przykłady

A.Zwracanie wierszy synchronizacja początkowa danych

Poniższy przykład pokazuje sposób uzyskiwania danych synchronizacja początkowa dane tabela .Kwerenda zwraca wszystkie dane wierszy i ich wersje skojarzone.Można wstawić lub dodać dane do systemu, który będzie zawierał zsynchronizowanych danych.

-- 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.Wyświetlanie listy wszystkich zmian wprowadzonych od określonej wersja

Poniższy przykład wyświetla wszystkie zmiany wprowadzone w tabela od określonej wersja (@last_sync_version).[Emp ID]i SSN kolumn w złożony kluczpodstawowy.

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.Uzyskiwanie wszystkie zmienione dane do synchronizacji

W poniższym przykładzie pokazano, jak można uzyskać wszystkie dane, które zostały zmienione.Ta kwerenda łączy śledzenie informacji z użytkownika tabela tak, aby zwracane informacje tabela użytkownika zmian.A LEFT OUTER JOIN jest używana, tak aby wiersz jest zwracana dla usuniętych wierszy.

-- 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.Wykrywanie konfliktów przy użyciu CHANGETABLE(VERSION...)

Poniższy przykład pokazuje sposób aktualizacji wiersza tylko wtedy, gdy wiersz nie zmienił się od czasu ostatniej synchronizacji.Numer wersja określonego wiersza jest uzyskiwany przy użyciu CHANGETABLE.Jeśli wiersz został zaktualizowany, nie zostaną wprowadzone zmiany, a kwerenda zwraca informacje o najnowszych zmian w wierszu.

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