sp_table_validation (Transact-SQL)

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 ou sur la base de données d'abonnement de l'Abonné. La prise en charge des serveurs de publication Oracle n'est pas assurée.

Icône Lien de rubrique Conventions de la syntaxe de 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. table est de type sysname, sans valeur par défaut.

  • [ @expected_rowcount=] expected_rowcountOUTPUT
    Spécifie s'il faut retourner le nombre de lignes attendu pour la table. expected_rowcount est de type int, avec NULL comme valeur par défaut. Si la valeur est 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=] expected_checksumOUTPUT
    Spécifie s'il faut retourner la somme de contrôle attendue pour la table. expected_checksum est de type numeric, avec NULL comme valeur par défaut. Si la valeur est 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. type_of_check_requested est de type smallint, avec 1 comme valeur par défaut.

    Si la valeur est 0, exécute un décompte de lignes et une somme de contrôle Microsoft SQL Server compatible avec la version 7.0.

    Si la valeur est 1, effectue un décompte de lignes.

    Si la valeur est 2, effectue un décompte de lignes et une somme de contrôle binaire.

  • [ @owner=] 'owner'
    Nom du propriétaire de la table. owner est de type sysname, avec NULL comme valeur par défaut.

  • [ @full_or_fast=] full_or_fast
    Méthode utilisée pour calculer le nombre de lignes. full_or_fast est de type tinyint, avec 2 comme valeur par défaut, et peut prendre l'une de ces valeurs.

    Valeur

    Description

    0

    Effectue un comptage total à l'aide de COUNT(*).

    1

    Effectue un comptage rapide à partir de sysindexes.rows. Le décompte de lignes est nettement plus rapide dans sysindexes que dans la table. Cependant, comme sysindexes n'est pas mis à jour immédiatement, le nombre de lignes peut être inexact.

    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 a pour valeur NULL et si la procédure stockée est en cours d'utilisation pour l'obtention de la valeur, une fonction COUNT(*) totale est toujours utilisée.

  • [ @shutdown_agent=] shutdown_agent
    Spécifie que l'Agent de distribution doit fermer la session immédiatement après la fin de la validation s'il exécute sp_table_validation. shutdown_agent est de type bit, avec 0 comme valeur par défaut. Si la valeur est 0, l'Agent de réplication ne se ferme pas. Si la valeur est 1, l'erreur 20578 est déclenchée et l'Agent de réplication est signalé à la fermeture. Ce paramètre est ignoré à l'exécution de sp_table_validation par un utilisateur.

  • [ @table_name =] table_name
    Nom de la table qui contient la vue utilisée pour les messages de sortie. table_name est de type sysname, avec @table comme valeur par défaut.

  • [ @column_list= ] 'column_list'
    Liste de colonnes à utiliser dans la fonction de somme de contrôle. column_list est de type nvarchar(4000), avec NULL comme valeur par défaut. 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, au cours de la validation de la somme de contrôle, la somme de contrôle attendue est égale à la somme de contrôle de la table, la procédure sp_table_validation retourne un message indiquant le succès de la validation. Sinon, elle retourne un message indiquant que la table peut ne plus être synchronisée et indique la différence entre le nombre de lignes attendu et le nombre de lignes réel.

Si, au cours de la validation du décompte de lignes, le nombre de lignes attendu est égal au nombre de lignes de la table, la procédure sp_table_validation retourne un message indiquant le succès de la validation. Sinon, elle retourne un message indiquant que la table peut ne plus être synchronisée et indique la différence entre le nombre de lignes attendu et le nombre réel.

Notes

sp_table_validation est utilisée dans tous les types de réplications. 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. La somme de contrôle ne vérifie pas les colonnes de manière sélective et ne peut pas s'exécuter sur une vue ou une partition verticale de la table. En outre, la somme de contrôle saute les contenus des colonnes text et image (par conception).

Lors d'une somme de contrôle, la structure de la table doit être identique sur les deux serveurs ; les tables doivent posséder les mêmes colonnes, dans le même ordre, les mêmes types et longueurs de données et les mêmes conditions NULL/NOT NULL. Par exemple, si le serveur de publication a exécuté une instruction CREATE TABLE, puis une instruction ALTER TABLE pour ajouter des colonnes, mais que le script appliqué au niveau de l'Abonné est une simple CREATE TABLE, la structure n'est PAS la même. Si vous n'êtes pas sûr que les structures des deux tables sont identiques, recherchez syscolumns et vérifiez que le décalage est le même dans les deux tables.

Il est possible que les valeurs à virgule flottante génèrent des différences de somme de contrôle si l'utilitaire bcp en mode caractère a été utilisé, ce qui se produit si la publication possède des abonnés autres que 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 des autorisations SELECT sur la table en cours de validation.

Voir aussi

Référence

CHECKSUM (Transact-SQL)

@@ROWCOUNT (Transact-SQL)

sp_article_validation (Transact-SQL)

sp_publication_validation (Transact-SQL)

Procédures stockées système (Transact-SQL)