Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Geeft de log-sequentienummer (LSN) waarde terug uit de start_lsn kolom in de cdc.lsn_time_mapping systeemtabel voor de opgegeven tijd. Je kunt deze functie gebruiken om systematisch datetime-bereiken te koppelen aan het LSN-gebaseerde bereik dat nodig is voor de change data capture enumeration functies cdc.fn_cdc_get_all_changes_<capture_instance> en cdc.fn_cdc_get_net_changes_<capture_instance> om datawijzigingen binnen dat bereik terug te geven.
Transact-SQL syntaxis-conventies
Syntax
sys.fn_cdc_map_time_to_lsn ( '<relational_operator>', tracking_time )
<relational_operator> ::=
{ largest less than
| largest less than or equal
| smallest greater than
| smallest greater than or equal
}
Arguments
'<relational_operator>' { grootste kleiner dan | grootste kleiner dan of gelijk | kleinste groter dan | kleinste groter dan of gelijk }
Wordt gebruikt om een verschillende LSN-waarde in binnen de cdc.lsn_time_mapping tabel te identificeren met een bijbehorende tran_end_time waarde die voldoet aan de relatie wanneer vergeleken met de tracking_time-waarde .
relational_operator is nvarchar(30).
tracking_time
Is de datum-tijdwaarde om mee te vergelijken? tracking_time is de date.
Terugbrengtype
binary(10)
Remarks
Om te begrijpen hoe de sys.fn_cdc_map_time_to_lsn functie kan worden gebruikt om datetime-bereiken aan LSN-bereiken toe te wijzen, overweeg het volgende scenario.
Stel dat een consument dagelijks veranderingsgegevens wil extraheren. Dat wil zeggen, de consument wil alleen veranderingen voor een bepaalde dag tot en met middernacht. De ondergrens van het tijdsbereik zou opgaan, maar niet inclusief middernacht van de vorige dag. De bovengrens zou tot en met middernacht van de gegeven dag zijn. Het volgende voorbeeld laat zien hoe de functie sys.fn_cdc_map_time_to_lsn systematisch kan worden gebruikt om dit tijdsgebonden bereik in te beelden naar het LSN-gebaseerde bereik dat nodig is voor de wijzigingsdata-opname om alle wijzigingen binnen dat bereik terug te geven.
DECLARE @begin_time DATETIME,
@end_time DATETIME,
@begin_lsn BINARY (10),
@end_lsn BINARY (10);
SET @begin_time = '2007-01-01 12:00:00.000';
SET @end_time = '2007-01-02 12:00:00.000';
SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);
SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);
SELECT *
FROM cdc.fn_cdc_get_net_changes_HR_Department(@begin_lsn, @end_lsn, 'all` `');
De relationele operator smallest greater than wordt gebruikt om wijzigingen te beperken tot die welke na middernacht op de vorige dag plaatsvonden. Als meerdere vermeldingen met verschillende LSN-waarden de waarde delen die tran_end_time als de ondergrens in de cdc.lsn_time_mapping-tabel is geïdentificeerd, zal de functie het kleinste LSN teruggeven en ervoor zorgen dat alle vermeldingen zijn opgenomen. Voor de bovengrens wordt de relationele operator largest less than or equal to gebruikt om ervoor te zorgen dat het bereik alle invoeren voor de dag bevat, inclusief die met middernacht als tran_end_time waarde. Als meerdere vermeldingen met verschillende LSN-waarden de waarde delen die tran_end_time als bovengrens is geïdentificeerd, zal de functie de grootste LSN teruggeven en ervoor zorgen dat alle vermeldingen zijn opgenomen.
Permissions
Vereist lidmaatschap van de openbare rol.
Examples
Het volgende voorbeeld gebruikt de sys.fn_cdc_map_time_to_lsn functie om te bepalen of er rijen in de cdc.lsn_time_mapping-tabel zijn met een tran_end_time waarde die groter is dan of gelijk aan middernacht. Deze query kan bijvoorbeeld worden gebruikt om te bepalen of het capture-proces de wijzigingen die tot middernacht van de vorige dag zijn gecommitteerd al heeft verwerkt, zodat het extraheren van wijzigingsgegevens voor die dag kan doorgaan.
DECLARE @extraction_time DATETIME,
@lsn BINARY (10);
SET @extraction_time = '2007-01-01 12:00:00.000';
SELECT @lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @extraction_time);
IF @lsn IS NOT NULL
BEGIN
<some action>
END