Partage via


sp_table_validation (Transact-SQL)

S'applique à : SQL Server

Retourne des informations sur le nombre de lignes ou sur la somme de contrôle d'une table ou d'une vue indexée, ou bien compare ces informations avec la table ou la vue indexée spécifiée. Cette procédure stockée est exécutée sur la base de données de publication du serveur de publication et sur la base de données d'abonnement de l'Abonné.

Remarque

sp_table_validation n’est pas pris en charge pour les serveurs de publication Oracle.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_table_validation [ @table = ] 'table'
    [ , [ @expected_rowcount = ] type_of_check_requested OUTPUT ]
    [ , [ @expected_checksum = ] expected_checksum OUTPUT ]
    [ , [ @rowcount_only = ] rowcount_only ]
    [ , [ @owner = ] 'owner' ]
    [ , [ @full_or_fast = ] full_or_fast ]
    [ , [ @shutdown_agent = ] shutdown_agent ]
    [ , [ @table_name = ] 'table_name' ]
    [ , [ @column_list = ] 'column_list' ]
[ ; ]

Arguments

[ @table = ] 'table'

Nom de la table. la table est sysname, sans valeur par défaut.

[ @expected_rowcount = ] sortie expected_rowcount

Spécifie s'il faut retourner le nombre de lignes attendu pour la table. @expected_rowcount est int, avec la valeur par défaut NULL. Si NULL, le nombre de lignes réel est retourné en tant que paramètre de sortie. Si une valeur est fournie, celle-ci est confrontée au nombre réel de lignes en vue d'une identification des éventuelles différences.

[ @expected_checksum = ] sortie de expected_checksum

Spécifie s'il faut retourner la somme de contrôle attendue pour la table. @expected_checksum est numérique, avec la valeur par défaut NULL. Si NULL, la somme de contrôle réelle est retournée en tant que paramètre de sortie. Si une valeur est fournie, celle-ci est confrontée à la somme de contrôle réelle en vue d'une identification des éventuelles différences.

[ @rowcount_only = ] type_of_check_requested

Spécifie le type de la somme de contrôle ou du nombre de lignes à effectuer. @rowcount_only est smallint, avec une valeur par défaut de 1.

Si 0, effectuez un nombre de lignes et une somme de contrôle compatible SQL Server 7.0.

Si 1, effectuez une vérification de nombre de lignes uniquement.

Si 2, effectuez un nombre de lignes et une somme de contrôle binaire.

[ @owner = ] 'owner'

Nom du propriétaire de la table. @owner est sysname, avec la valeur par défaut NULL.

[ @full_or_fast = ] full_or_fast

Méthode utilisée pour calculer le nombre de lignes. @full_or_fast est tinyint, avec une valeur par défaut 2, et peut être l’une de ces valeurs.

Valeur Description
0 Effectue un comptage total à l'aide de COUNT(*).
1 Fait le nombre rapide de sysindexes.rows. Le comptage de lignes est sysindexes beaucoup plus rapide que le comptage de lignes dans la table réelle. Toutefois, étant donné qu’il sysindexes est mis à jour de manière différée, le nombre de lignes peut ne pas être exact.
2 (valeur par défaut) Exécute un décompte rapide conditionnel en essayant d'abord la méthode rapide. Si la méthode rapide affiche des différences, revient à la méthode totale. Si expected_rowcount est NULL et que la procédure stockée est utilisée pour obtenir la valeur, une valeur complète COUNT(*) est toujours utilisée.

[ @shutdown_agent = ] shutdown_agent

Si l’Agent de distribution est en cours d’exécutionsp_table_validation, spécifie si l’Agent de distribution doit s’arrêter immédiatement à la fin de la validation. @shutdown_agent est bit, avec la valeur par défaut 0. Si 0, l’agent de réplication ne s’arrête pas. Si 1, l’erreur 20578 est déclenchée et l’agent de réplication est signalé pour s’arrêter. Ce paramètre est ignoré lorsqu’il sp_table_validation est exécuté directement par un utilisateur.

[ @table_name = ] 'nom_table'

Nom de la table de la vue utilisée pour les messages de sortie. table_name est sysname, avec une valeur par défaut de @table.

[ @column_list = ] 'column_list'

Liste des colonnes qui doivent être utilisées dans la fonction de somme de contrôle. column_list est nvarchar(4000), avec la valeur par défaut NULL. Active la validation d'articles de fusion pour spécifier une liste de colonnes excluant les colonnes calculées et les colonnes timestamp.

Valeurs des codes de retour

Si vous effectuez une validation de somme de contrôle et que la somme de contrôle attendue est égale à la somme de contrôle dans la table, sp_table_validation retourne un message indiquant que la table a passé la validation de somme de contrôle. Sinon, il retourne un message indiquant que la table peut être hors synchronisation et signale la différence entre le nombre attendu et le nombre réel de lignes.

Si vous effectuez une validation de nombre de lignes et que le nombre attendu de lignes est égal au nombre dans la table, sp_table_validation retourne un message indiquant que la table a passé la validation du nombre de lignes. Sinon, il retourne un message indiquant que la table peut être hors synchronisation et signale la différence entre le nombre attendu et le nombre réel de lignes.

Notes

sp_table_validation est utilisé dans tous les types de réplication. sp_table_validation n’est pas pris en charge pour les serveurs de publication Oracle.

La somme de contrôle calcule une vérification de redondance cyclique de 32 bits (CRC) sur l'image de la ligne entière de la page. Elle ne vérifie pas de manière sélective les colonnes et ne peut pas fonctionner sur une vue ou une partition verticale de la table. En outre, la somme de contrôle ignore le contenu des colonnes de texte et d’image (par conception).

Lorsque vous effectuez une somme de contrôle, la structure de la table doit être identique entre les deux serveurs ; autrement dit, les tables doivent avoir les mêmes colonnes existantes dans le même ordre, les mêmes types de données et les mêmes longueurs, ainsi que les mêmes NULL/NOT NULL conditions. Par exemple, si le serveur de publication a effectué un CREATE TABLE, puis un ALTER TABLE pour ajouter des colonnes, mais que le script appliqué à l’Abonné est une table simple CREATE , la structure n’est pas la même. Si vous n’êtes pas certain que la structure des deux tables est identique, examinez sys.syscolumns et vérifiez que le décalage dans chaque table est le même.

Les valeurs à virgule flottante sont susceptibles de générer des différences de somme de contrôle si le mode caractère bcp a été utilisé, ce qui est le cas si la publication comporte des abonnés non-SQL Server. Cela est dû à des erreurs mineures et inévitables de précision lors de la conversion vers le mode caractère et à partir de ce mode.

autorisations

Pour exécuter sp_table_validation, vous devez disposer d’autorisations SELECT sur la table en cours de validation.