Partager via


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>capture_instance est la valeur spécifiée pour l’instance de capture 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).

Seules les lignes dans la capture de données modifiées.[ capture_instance]_CT table de modification 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).

Seules les lignes dans la capture de données modifiées.[ capture_instance]_CT table de modification 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 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’a pas l’autorisation d’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'.

Notes

Les colonnes d’image, de texte et de ntext de type de données sont toujours affectées à une valeur NULL lorsque __$operation = 1 ou __$operation = 3. Les colonnes de type de données varbinary(max), varchar(max)ou nvarchar(max) reçoivent une valeur NULL lorsque __$operation = 3, sauf si la colonne a changé pendant la mise à jour. Lorsque __$operation = 1, ces colonnes reçoivent leur valeur 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> ou cdc.fn_cdc_get_net_changes_<capture_instance>. Si le lsn_value paramètre dépasse le temps du LSN le plus bas ou du LSN le plus élevé, l’exécution de ces fonctions retourne dans 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.

Exemples

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

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 l’instance HR_Departmentde capture, 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