Partager via


sys.fn_cdc_map_time_to_lsn (Transact-SQL)

S'applique à : SQL Server

Retourne la valeur de numéro de séquence de journal (LSN) de la start_lsn colonne de la table système cdc.lsn_time_mapping pour l’heure spécifiée. Vous pouvez utiliser cette fonction pour mapper systématiquement les plages datetime dans la plage basée sur LSN requise par les fonctions d’énumération de capture de données modifiées cdc.fn_cdc_get_all_changes_<capture_instance> et cdc.fn_cdc_get_net_changes_<capture_instance> pour retourner les modifications de données dans cette plage.

Conventions de la syntaxe Transact-SQL

Syntaxe

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>' { plus grand inférieur à | plus grand ou égal | plus petit que | plus petit supérieur ou égal }

Utilisé pour identifier une valeur LSN distincte dans la cdc.lsn_time_mapping table avec un associé qui tran_end_time satisfait la relation par rapport à la valeur tracking_time .

relational_operator est nvarchar(30).

tracking_time

Valeur datetime à mettre en correspondance. tracking_time datetime.

Type renvoyé

binary(10)

Notes

Pour comprendre comment la sys.fn_cdc_map_time_to_lsn fonction peut être utilisée pour mapper des plages datetime à des plages LSN, envisagez le scénario suivant.

Supposez qu'un utilisateur souhaite extraire des données de modifications de façon quotidienne. Autrement dit, il ne souhaite extraire que les modifications pour un jour donné jusqu'à minuit compris. La limite inférieure de la plage temporelle se situerait à minuit, sans l'inclure, le jour précédent. La limite supérieure se situerait à minuit (compris) le jour donné. L’exemple suivant montre comment la fonction sys.fn_cdc_map_time_to_lsn peut être utilisée pour mapper systématiquement cette plage basée sur le temps dans la plage basée sur LSN requise par les fonctions d’énumération de capture de données modifiées pour retourner toutes les modifications dans cette plage.

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` `');

L’opérateur smallest greater than relationnel est utilisé pour restreindre les modifications apportées à celles qui se sont produites après minuit le jour précédent. Si plusieurs entrées avec des valeurs LSN différentes partagent la tran_end_time valeur identifiée comme limite inférieure dans la table cdc.lsn_time_mapping , la fonction retourne le plus petit LSN pour s’assurer que toutes les entrées sont incluses. Pour la limite supérieure, l’opérateur largest less than or equal to relationnel est utilisé pour s’assurer que la plage inclut toutes les entrées du jour, y compris celles qui ont minuit comme tran_end_time valeur. Si plusieurs entrées avec des valeurs LSN différentes partagent la tran_end_time valeur identifiée comme limite supérieure, la fonction retourne le LSN le plus grand, ce qui garantit que toutes les entrées sont incluses.

autorisations

Nécessite l'appartenance au rôle public .

Exemples

L’exemple suivant utilise la sys.fn_cdc_map_time_to_lsn fonction pour déterminer s’il existe des lignes dans la table cdc.lsn_time_mapping avec une tran_end_time valeur supérieure ou égale à minuit. Cette requête peut être utilisée pour déterminer, par exemple, si le processus de capture a déjà traité les modifications validées jusqu'à minuit le jour précédent, afin que l'extraction des données de modifications pour ce jour puisse continuer.

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

Voir aussi