<cdc.fn_cdc_get_all_changes_capture_instance> (Transact-SQL)

S’applique à :SQL Server

Retourne une ligne pour chaque modification appliquée à la table source dans la plage spécifiée de numéros séquentiels dans le journal. Si une ligne source est modifiée à plusieurs reprises pendant l'intervalle, chaque modification est représentée dans le jeu de résultats retourné. En plus de retourner les données de modification, quatre colonnes de métadonnées fournissent les informations nécessaires pour appliquer les modifications à une autre source de données. Les options de filtrage de lignes régissent le contenu des colonnes de métadonnées aussi bien que les lignes retournées dans le jeu de résultats. Lorsque l'option de filtrage de lignes 'all' est spécifiée, chaque modification a exactement une ligne pour identifier la modification. Lorsque l'option 'all update old' est spécifiée, les opérations de mise à jour sont représentées sous la forme de deux lignes : une qui contient les valeurs des colonnes capturées avant la mise à jour et une autre qui contient les valeurs des colonnes capturées après la mise à jour.

Cette fonction d'énumération est créée lorsqu'une table source est activée pour la capture des données modifiées. Le nom de la fonction est dérivé et utilise le format cdc.fn_cdc_get_all_changes_<capture_instance>où capture_instance est la valeur spécifiée pour la capture instance lorsque la table source est activée pour la capture de données modifiées.

Conventions de la syntaxe Transact-SQL

Syntaxe

  
cdc.fn_cdc_get_all_changes_capture_instance ( from_lsn , to_lsn , '<row_filter_option>' )  
  
<row_filter_option> ::=  
{ all  
 | all update old  
}  

Arguments

from_lsn

Valeur LSN qui représente le point de terminaison inférieur de la plage de numéros séquentiels dans le journal à inclure dans le jeu de résultats. from_lsn est binary(10).

Uniquement les lignes dans la cdc.[ capture_instance]_CT table de modifications avec une valeur dans __$start_lsn supérieure ou égale à from_lsn sont incluses dans le jeu de résultats.

to_lsn

Valeur LSN qui représente le point de terminaison supérieur de la plage de numéros séquentiels dans le journal à inclure dans le jeu de résultats. to_lsn est binary(10).

Uniquement les lignes dans la cdc.[ capture_instance]_CT table de modifications avec une valeur dans __$start_lsn supérieure ou égale à from_lsn et inférieure ou égale à to_lsn sont incluses dans le jeu de résultats.

<> row_filter_option ::= { all | all update old }

Option qui régit le contenu des colonnes de métadonnées aussi bien que les lignes retournées dans le jeu de résultats.

Il peut s'agir de l'une des options suivantes :

all
Retourne toutes les modifications dans la plage spécifiée de numéro séquentiel dans le journal. Pour les modifications dues à une opération de mise à jour, cette option retourne seulement la ligne qui contient les nouvelles valeurs après que la mise à jour a été appliquée.

all update old
Retourne toutes les modifications dans la plage spécifiée de numéro séquentiel dans le journal. Pour les modifications dues à une opération de mise à jour, cette option retourne à la fois la ligne qui contient les valeurs de colonnes avant la mise à jour et celle qui contient les valeurs de colonnes après la mise à jour.

Table retournée

Nom de la colonne Type de données Description
__$start_lsn binary(10) Numéro séquentiel dans le journal de validation associé à la modification qui préserve l'ordre de validation de la modification. Les modifications validées dans la même transaction partagent la même valeur LSN de validation.
__$seqval binary(10) Valeur de classement utilisée pour classer les modifications d'une ligne dans une transaction.
__$operation int Identifie l'opération du langage de manipulation de données permettant d'appliquer la ligne de données de modification à la source de données cible. Il peut s'agir d'une des méthodes suivantes :

1 = suppression

2 = insertion

3 = mise à jour (les valeurs de colonne capturées sont celles avant l'opération de mise à jour). Cette valeur s'applique uniquement lorsque l'option de filtre de lignes 'all update old' est spécifiée.

4 = mise à jour (les valeurs de colonne capturées sont celles après l'opération de mise à jour)
__$update_mask varbinary(128) Masque de bits avec un bit correspondant à chaque colonne capturée identifiée pour l'instance de capture. Cette valeur a tous les bits définis défini sur 1 lorsque __$operation = 1 ou 2. Lorsque __$operation = 3 ou 4, seuls les bits correspondant aux colonnes modifiées sont définis sur 1.
<colonnes des tables sources capturées> varie Les colonnes restantes retournées par la fonction sont les colonnes capturées identifiées lorsque l'instance de capture a été créée. Si aucune colonne n'a été spécifiée dans la liste des colonnes capturées, toutes les colonnes de la table source sont retournées.

Autorisations

Nécessite l’appartenance au rôle serveur fixe sysadmin ou db_owner rôle de base de données fixe. Pour tous les autres utilisateurs, requiert l'autorisation SELECT sur toutes les colonnes capturées dans la table source et, si un rôle de régulation pour l'instance de capture a été défini, l'appartenance à ce rôle de base de données. Lorsque l’appelant n’est pas autorisé à afficher les données sources, la fonction retourne l’erreur 229 The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '\<DatabaseName>', schema 'cdc'.

Remarques

Une valeur NULL est toujours attribuée aux colonnes de type de données image, text et ntext lorsque __$operation = 1 ou __$operation = 3. Une valeur NULL est affectée aux colonnes de type de données varbinary(max), varchar(max) ou nvarchar(max) lorsque __$operation = 3, sauf si la colonne a été modifiée pendant la mise à jour. Lorsque __$operation = 1, leur valeur est affectée à ces colonnes au moment de la suppression. Les colonnes calculées incluses dans une instance de capture ont toujours une valeur NULL.

L’erreur 313 est attendue si la plage LSN fournie n’est pas appropriée lors de l’appel cdc.fn_cdc_get_all_changes_<capture_instance> de ou cdc.fn_cdc_get_net_changes_<capture_instance>. Si le lsn_value paramètre est au-delà du LSN le plus faible ou du LSN le plus élevé, l’exécution de ces fonctions retourne l’erreur 313 : Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Cette erreur doit être gérée par le développeur. Vous trouverez un exemple de T-SQL pour une solution de contournement dans ReplTalk sur GitHub.

Exemples

Plusieurs modèles SQL Server Management Studio qui montrent comment utiliser les fonctions de requête de capture de données modifiées sont disponibles. Ces modèles sont disponibles dans le menu Affichage de Management Studio. Pour plus d’informations, consultez Modèle Explorer.

Cet exemple illustre le Enumerate All Changes for Valid Range Template. Elle utilise la fonction cdc.fn_cdc_get_all_changes_HR_Department pour signaler toutes les modifications actuellement disponibles pour la capture instance HR_Department, qui est définie pour la table source HumanResources.Department dans la AdventureWorks2022 base de données.

-- ========  
-- Enumerate All Changes for Valid Range Template  
-- ========  
USE AdventureWorks2022;  
GO  
  
DECLARE @from_lsn binary(10), @to_lsn 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  

Voir aussi