CDC.fn_cdc_get_net_changes_<capture_instance> (języka Transact-SQL)
Zwraca jeden wiersz obroty netto dla każdego wiersza źródło zmienione LSN zakres.Oznacza to, że gdy wiersza źródło ma wiele zmian podczas LSN zakres, pojedynczy wiersz, który odzwierciedla ostateczna zawartość wiersza jest zwracana przez funkcja.Jeśli transakcja wstawia wiersz wtabela źródłoi późniejszej transakcji w ramach aktualizacjizakres LSNjedną lub więcej kolumn w wierszu, funkcja zwraca tylko jeden wiersz, który zawiera wartości aktualizowanych kolumna .
Wyliczanie funkcja jest tworzony, gdy źródło tabela jest włączone do przechwytywania danych zmian i określone netto śledzenia.Aby włączyć śledzenie netto, źródło tabela musi mieć klucz podstawowy lub indeks unikatowy.Nazwa funkcja wywodzi się i korzysta z formatu cdc.fn_cdc_get_net_changes_capture_instance, gdzie capture_instance jest wartość określona dla przechwytywania wystąpienie , gdy źródło tabela został włączony do przechwytywania danych zmian.Aby uzyskać więcej informacji, zobacz sys.sp_cdc_enable_table (języka Transact-SQL).
Składnia
cdc.fn_cdc_get_net_changes_capture_instance ( from_lsn , to_lsn , '<row_filter_option>' )
<row_filter_option> ::=
{ all
| all with mask
| all with merge
}
Argumenty
from_lsn
LSN , reprezentującą niskie końcowy LSNzakres w zestaw wyników. from_lsnis binary(10).Tylko wiersze w ZOZ. [capture_instance] _CT zmian w tabela z wartością w __$start_lsn równe lub większe niż from_lsn znajdują się w zestaw wyników.
to_lsn
LSN , reprezentującą wysoką końcowy LSNzakres w zestaw wyników. to_lsnis binary(10).Tylko wiersze w ZOZ. [capture_instance] _CT zmian w tabela z wartością w __$start_lsn mniejsza lub równa from_lsn lub równa to_lsn znajdują się w zestaw wyników.
<row_filter_option> :: = {wszystkie | wszystko za pomocą maski | wszystko za pomocą korespondencji seryjnej}
Opcja reguluje zawartość kolumny metadane , jak również wierszy zwracanych w zestaw wyników.Może mieć jedną z następujących opcji:wszystkie
Zwraca LSN ostateczne zmiany wiersza i działania konieczne do stosowania w wierszu kolumny metadane __$start_lsn i $operation.kolumna$update_mask ma zawsze wartość NULL.wszystko to przy użyciu maski
Zwraca LSN ostateczne zmiany wiersza i działania konieczne do stosowania w wierszu kolumny metadane __$start_lsn i $operation.Ponadto, podczas operacji update zwraca ($operation = 4) kolumny przechwyconych zmodyfikowane w aktualizacji są oznaczone w wartości zwracane w __$update_mask.wszystko w korespondencji seryjnej
Zwraca LSN zmiany końcowej do wierszy w kolumnach metadane $start_lsn.kolumna$operation będzie jedną z dwóch wartości: 1 do 5, aby wskazać, że operacja niezbędnych do zastosowania zmian jest instrukcji insert lub update i delete.kolumna__$update_mask ma zawsze wartość NULL.Ponieważ dodaje logikę do określenia dokładnych operacji dla danej zmiany złożoność kwerendy, ta opcja jest przeznaczona do poprawić wydajność kwerendy po wystarczy wskazać, że operacji niezbędnych do zastosowania zmian danych jest instrukcji insert lub update, ale nie jest konieczne jednoznacznie rozróżnić.Ta opcja jest najbardziej atrakcyjną w środowiskach miejsce docelowe , których operacji scalania jest dostępna bezpośrednio, takich jak SQL Server 2008 środowiska.
Zwracana tabela
Nazwa kolumny |
Typ danych |
Opis |
---|---|---|
__$start_lsn |
binary(10) |
LSN skojarzonych z transakcją zatwierdzanie zmiany. Wszystkie zmiany w tej samej transakcji współużytkować te same zatwierdzanie LSN.Na przykład, jeśli operację aktualizacji wtabela źródłomodyfikuje dwie kolumny w dwóch wierszach, zmiana tabela będzie zawierał cztery wiersze, każdy z tym samym __$start_lsn wartości. |
__$seqval |
binary(10) |
Sekwencyjny wartość używana do zmiany wiersza w obrębie transakcji zamówienia. |
__$operation |
int |
Identyfikuje operację język edycji danych (DML), niezbędnych do zastosowania wiersz danych zmiana miejsce docelowe danych źródło. Jeśli wartość row_filter_option parametr jest all lub all with mask, wartości w tej kolumna może być jedną z następujących wartości: 1 = delete 2 = Wstaw 4 = aktualizacji Jeśli wartość row_filter_option parametr jest all with merge, wartości w tej kolumna może być jedną z następujących wartości: 1 = delete 5 = insert lub update Wartość 5 oznacza, że nie wiadomo czy wiersz jest już obecny i tylko musi zostać zaktualizowane lub czy wiersz nie jest aktualnie obecne i musi zostać wstawiona. |
__$update_mask |
varbinary(128) |
Maska bitowa bitem odpowiadającą każdej przechwyconych kolumna określone wystąpienieprzechwytywania.Wartość ta ma wszystkie zdefiniowane bitów zestaw do 1 gdy __$operation = 1 lub 2.Gdy __$operation = 3 lub 4, tylko tych bitów odpowiadającej kolumn, które zmiany są zestaw na wartość 1. |
<kolumnytabela przechwyconych źródło > |
zmienia się |
Pozostałe kolumny zwracana przez funkcja są kolumny ztabela źródło, które zostały zidentyfikowane jako kolumny przechwyconych podczas przechwytywania wystąpienie zostało utworzone. Jeżeli podane zostały żadne kolumny na liście przechwyconych kolumna , zwracane są wszystkie kolumny wtabela źródło. |
Uprawnienia
Wymaga członkostwa w sysadmin stała rola serwera lub db_owner rola bazy danychstałej.Dla innych użytkowników wymaga uprawnienie SELECT wszystkich przechwyconych kolumn wtabela źródłoi, jeśli zdefiniowano bramkowania roli przechwytywania wystąpienie członkostwo w tej rola bazy danych. Gdy obiekt wywołujący nie ma uprawnień do wyświetlania danych źródło , funkcja zwraca błąd 208 (Nieprawidłowa nazwa obiektu).
Uwagi
Jeśli określonyzakres LSNnie wchodzą w osi czasu wystąpienieprzechwytywania śledzenia zmian, funkcja zwraca błąd 208 (Nieprawidłowa nazwa obiektu).
Przykłady
W poniższym przykładzie użyto funkcja cdc.fn_cdc_get_net_changes_HR_Department do raportu zmiany netto wprowadzone źródło tabela HumanResources.Department podczas interwału określonego czas .
Pierwszy, GETDATE funkcja jest używany do oznaczania początek przedziału czas .Po kilku instrukcji DML są stosowane do źródło tabela GETDATE funkcja jest wywoływana ponownie, aby zidentyfikować koniec interwału czas .funkcjasys.fn_cdc_map_time_to_lsn jest następnie używana do mapowania zmian przechwytywania kwerendy danych zakres poprowadzoną LSN wartości interwału czas . Wreszcie, funkcja cdc.fn_cdc_get_net_changes_HR_Department proszeni o uzyskanie zmiany netto w źródło tabela dla interwału czas .Zwróć uwagę, wiersz, który jest wstawiany, a następnie usuwane nie pojawiają się w zestaw wyników zwrócone przez funkcja.Jest tak, ponieważ wiersz, który jest najpierw dodawane i usuwane w oknie kwerendy nie powoduje żadnej zmiany netto wtabela źródłodla interwału. Przed uruchomić ten przykład, należy najpierw uruchomić przykład b w sys.sp_cdc_enable_table (języka Transact-SQL).
USE AdventureWorks2008R2;
GO
DECLARE @begin_time datetime, @end_time datetime, @from_lsn binary(10), @to_lsn binary(10);
-- Obtain the beginning of the time interval.
SET @begin_time = GETDATE() -1;
-- DML statements to produce changes in the HumanResources.Department table.
INSERT INTO HumanResources.Department (Name, GroupName)
VALUES (N'MyDept', N'MyNewGroup');
UPDATE HumanResources.Department
SET GroupName = N'Resource Control'
WHERE GroupName = N'Inventory Management';
DELETE FROM HumanResources.Department
WHERE Name = N'MyDept';
-- Obtain the end of the time interval.
SET @end_time = GETDATE();
-- Map the time interval to a change data capture query range.
SET @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @begin_time);
SET @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);
-- Return the net changes occurring within the query window.
SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department(@from_lsn, @to_lsn, 'all');
Zobacz także