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 et les lignes retournées dans le jeu de résultats. Lorsque l'toutes les options de filtre de ligne est spécifiée, chaque modification a exactement une ligne pour identifier la modification. Lorsque l’option toutes les anciennes de mise à jour est spécifiée, les opérations de mise à jour sont représentées sous la forme de deux lignes : une contenant les valeurs des colonnes capturées avant la mise à jour et une autre contenant 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 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 de 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 de 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>
Option qui régit le contenu des colonnes de métadonnées et les lignes retournées dans le jeu de résultats.
Il peut s'agir de l'une des options suivantes :
toutes les
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.
toutes les anciennes de mise à jour
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 de l’une des valeurs suivantes :1 = supprimer2 = insertion3 = mise à jour (les valeurs de colonne capturées sont des valeurs de colonne 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 des valeurs de colonne 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 est 1 ou 2 . Lorsque __$operation est 3 ou 4 , seuls les bits correspondant aux colonnes modifiées sont définis sur 1 . |
<captured source table columns> |
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 de type de données image, texte et ntext sont toujours affectées à une valeur NULL
lorsque __$operation
est 1
ou __$operation
est 3
. Les colonnes de type de données varbinary(max), varchar(max)ou nvarchar(max) sont affectées à une valeur NULL
lorsque __$operation
est 3
sauf si la colonne a changé pendant la mise à jour. Lorsque __$operation
est 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 de NULL
.
L’erreur 313 est attendue si la plage LSN fournie n’est pas appropriée lors de l’appel de cdc.fn_cdc_get_all_changes_<capture_instance>
ou de cdc.fn_cdc_get_net_changes_<capture_instance>
. Si le paramètre lsn_value
dépasse le temps du LSN le plus bas 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.
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
. 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 AdventureWorks2022
.
-- Enumerate All Changes for Valid Range Template
USE AdventureWorks2022;
GO
DECLARE @from_lsn AS BINARY (10), @to_lsn AS 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