Partager via


cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

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 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 l'instance de capture lorsque la table source est activée pour la capture des données modifiées.

Icône Lien de rubriqueConventions de 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 de type binary(10).

    Seules les lignes de la table de modifications cdc.[capture_instance]_CT 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 de type binary(10).

    Seules les lignes de la table de modifications cdc.[capture_instance]_CT avec une valeur dans __$start_lsn inférieure ou égale à from_lsn 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éros séquentiels 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éros séquentiels 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 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. Valeurs possibles :

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. Tous les bits définis de cette valeur ont la valeur 1 lorsque __$operation = 1 ou 2. Lorsque __$operation = 3 ou 4, seuls les bits qui correspondent aux colonnes qui ont changé ont la valeur 1.

<colonnes de table source capturées>

variable

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

Requiert l'appartenance au rôle serveur fixe sysadmin ou au rôle de base de données fixe db_owner. 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 (« L'autorisation SELECT a été refusée sur l'objet 'fn_cdc_get_all_changes_... ', base de données '<Nom_Base_De_Données>', schéma 'cdc'. »).

Notes

Si la plage de numéros séquentiels dans le journal spécifiée n'est pas située dans la chronologie de suivi des modifications pour l'instance de capture, la fonction retourne l'erreur 208 (« Un nombre insuffisant d'arguments a été fourni pour la procédure ou fonction cdc.fn_cdc_get_all_changes. »).

Les colonnes de type de données image, text et ntext sont toujours affectées d'une valeur de type NULL lorsque __$operation = 1 ou __$operation = 3. Les colonnes de type de données varbinary(max), varchar(max) ou nvarchar(max) sont affectées d'une valeur de type NULL lorsque __$operation = 3, à moins que la colonne n'ait changé pendant la mise à jour. Lorsque __$operation = 1, ces colonnes sont affectées de leur valeur au moment de la suppression. Les colonnes calculées incluses dans une instance de capture ont toujours une valeur NULL.

Exemples

Plusieurs modèles SQL Server Management Studio disponibles illustrent 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 Utilisation des modèles de SQL Server Management Studio.

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

-- ==================================================
-- Enumerate All Changes for Valid Range Template
-- ==================================================
USE AdventureWorks
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