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.
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. ![]()
Kolumny obliczane nigdy nie są wyświetlane jako zmienione.
Wartość jest NULL, gdy jest spełniony jeden z następujących warunków:
|
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);