cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)
van toepassing op:SQL Server-
Retourneert één rij voor elke wijziging die wordt toegepast op de brontabel binnen het opgegeven LSN-bereik (log sequence number). Als een bronrij meerdere wijzigingen had tijdens het interval, wordt elke wijziging weergegeven in de geretourneerde resultatenset. Naast het retourneren van de wijzigingsgegevens bieden vier metagegevenskolommen de informatie die u nodig hebt om de wijzigingen toe te passen op een andere gegevensbron.
Opties voor het filteren van rijen bepalen de inhoud van de metagegevenskolommen en de rijen die worden geretourneerd in de resultatenset. Wanneer de alle rijfilteroptie is opgegeven, heeft elke wijziging precies één rij om de wijziging te identificeren. Wanneer de alle oude optie is opgegeven, worden updatebewerkingen weergegeven als twee rijen: een met de waarden van de vastgelegde kolommen vóór de update en een met de waarden van de vastgelegde kolommen na de update.
Deze opsommingsfunctie wordt gemaakt op het moment dat een brontabel is ingeschakeld voor het vastleggen van wijzigingsgegevens. De functienaam wordt afgeleid en gebruikt de indeling cdc.fn_cdc_get_all_changes_<capture_instance>
waarbij capture_instance de waarde is die is opgegeven voor het capture-exemplaar wanneer de brontabel is ingeschakeld voor het vastleggen van gegevens.
Transact-SQL syntaxisconventies
Syntaxis
cdc.fn_cdc_get_all_changes_<capture_instance> ( from_lsn , to_lsn , '<row_filter_option>' )
<row_filter_option> ::=
{ all
| all update old
}
Argumenten
from_lsn
De LSN-waarde die het lage eindpunt van het LSN-bereik vertegenwoordigt dat moet worden opgenomen in de resultatenset. from_lsn is binaire(10).
Alleen rijen in de cdc. [capture_instance]_CT tabel wijzigen met een waarde in __$start_lsn
groter dan of gelijk aan from_lsn zijn opgenomen in de resultatenset.
to_lsn
De LSN-waarde die het hoge eindpunt van het LSN-bereik vertegenwoordigt dat moet worden opgenomen in de resultatenset. to_lsn is binaire(10).
Alleen rijen in de cdc. [capture_instance]_CT tabel wijzigen met een waarde in __$start_lsn
groter dan of gelijk aan from_lsn en kleiner dan of gelijk aan to_lsn zijn opgenomen in de resultatenset.
<row_filter_option>
Een optie die de inhoud van de metagegevenskolommen en de rijen bepaalt die worden geretourneerd in de resultatenset.
Dit kan een van de volgende opties zijn:
alle
Retourneert alle wijzigingen binnen het opgegeven LSN-bereik. Voor wijzigingen als gevolg van een updatebewerking retourneert deze optie alleen de rij met de nieuwe waarden nadat de update is toegepast.
alle oude bijwerken
Retourneert alle wijzigingen binnen het opgegeven LSN-bereik. Voor wijzigingen als gevolg van een updatebewerking retourneert deze optie zowel de rij met de kolomwaarden vóór de update als de rij met de kolomwaarden na de update.
Tabel geretourneerd
Kolomnaam | Gegevenstype | Beschrijving |
---|---|---|
__$start_lsn |
binary(10) | LSN doorvoeren die is gekoppeld aan de wijziging die de doorvoervolgorde van de wijziging behoudt. Wijzigingen die zijn doorgevoerd in dezelfde transactie delen dezelfde doorvoer LSN-waarde. |
__$seqval |
binary(10) | Reekswaarde die wordt gebruikt om wijzigingen in een rij binnen een transactie te orden. |
__$operation |
Identificeert de DML-bewerking (Data Manipulat Language) die nodig is om de rij met wijzigingsgegevens toe te passen op de doelgegevensbron. Dit kan een van de volgende waarden zijn:1 = verwijderen2 = invoegen3 = bijwerken (vastgelegde kolomwaarden zijn kolomwaarden vóór de updatebewerking). Deze waarde is alleen van toepassing wanneer de rijfilteroptie 'alle update oud' is opgegeven.4 = bijwerken (vastgelegde kolomwaarden zijn kolomwaarden na de updatebewerking) |
|
__$update_mask |
varbinary(128) | Een bitmasker met een bit die overeenkomt met elke vastgelegde kolom die is geïdentificeerd voor het opname-exemplaar. Deze waarde heeft alle gedefinieerde bits ingesteld op 1 wanneer __$operation is 1 of 2 . Wanneer __$operation is 3 of 4 , worden alleen de bits die overeenkomen met kolommen die zijn gewijzigd, ingesteld op 1 . |
<captured source table columns> |
Varieert | De resterende kolommen die door de functie worden geretourneerd, zijn de vastgelegde kolommen die worden geïdentificeerd wanneer het opnameexemplaren zijn gemaakt. Als er geen kolommen zijn opgegeven in de vastgelegde kolomlijst, worden alle kolommen in de brontabel geretourneerd. |
Machtigingen
Vereist lidmaatschap van de sysadmin vaste serverfunctie of db_owner vaste databaserol. Voor alle andere gebruikers is SELECT-machtiging vereist voor alle vastgelegde kolommen in de brontabel en, als er een gatingsrol voor het opnameexemplaren is gedefinieerd, lidmaatschap van die databaserol. Wanneer de aanroeper niet gemachtigd is om de brongegevens weer te geven, retourneert de functie fout 229:
The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '<DatabaseName>', schema 'cdc'.
Opmerkingen
Kolommen van gegevenstype afbeelding, teksten worden altijd een NULL
waarde toegewezen wanneer __$operation
is 1
of __$operation
is 3
. Kolommen van het gegevenstype varbinary(max), varchar(max)of nvarchar(max) worden een NULL
-waarde toegewezen wanneer __$operation
3
tenzij de kolom tijdens de update is gewijzigd. Wanneer __$operation
is 1
, worden deze kolommen hun waarde toegewezen op het moment van de verwijdering. Berekende kolommen die zijn opgenomen in een capture-exemplaar, hebben altijd een waarde van NULL
.
Fout 313 wordt verwacht als het opgegeven LSN-bereik niet geschikt is bij het aanroepen van cdc.fn_cdc_get_all_changes_<capture_instance>
of cdc.fn_cdc_get_net_changes_<capture_instance>
. Als de parameter lsn_value
langer is dan de tijd van de laagste LSN of de hoogste LSN, retourneert de uitvoering van deze functies fout 313:
Msg 313, Level 16, State 3, Line 1
An insufficient number of arguments were supplied for the procedure or function.
Deze fout moet worden verwerkt door de ontwikkelaar.
Voorbeelden
Er zijn verschillende SQL Server Management Studio-sjablonen beschikbaar die laten zien hoe u de queryfuncties voor het vastleggen van wijzigingengegevens kunt gebruiken. Deze sjablonen zijn beschikbaar in het menu Weergave in Management Studio. Zie Template Explorervoor meer informatie.
In dit voorbeeld ziet u de Enumerate All Changes for Valid Range Template
. Deze maakt gebruik van de functie cdc.fn_cdc_get_all_changes_HR_Department
om alle momenteel beschikbare wijzigingen voor het capture-exemplaar te rapporteren HR_Department
, die is gedefinieerd voor de brontabel HumanResources.Department
in de AdventureWorks2022
-database.
-- Enumerate All Changes for Valid Range Template
USE AdventureWorks2022;
GO
DECLARE @from_lsn AS BINARY (10), @to_lsn AS BINARY (10);
SET @from_lsn = sys.fn_cdc_get_min_lsn('HR_Department');
SET @to_lsn = sys.fn_cdc_get_max_lsn();
SELECT *
FROM cdc.fn_cdc_get_all_changes_HR_Department(@from_lsn, @to_lsn, N'all');
GO