Partage via


sp_marksubscriptionvalidation (Transact-SQL)

S'applique à : SQL Server

Marque la transaction actuellement ouverte comme transaction de validation de niveau abonnement pour l'abonné spécifié. Cette procédure stockée est exécutée sur le serveur de publication dans la base de données de publication.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_marksubscriptionvalidation
    [ @publication = ] N'publication'
    , [ @subscriber = ] N'subscriber'
    , [ @destination_db = ] N'destination_db'
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

Arguments

[ @publication = ] N’publication'

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

[ @subscriber = ] N’subscriber'

Nom de l'Abonné. @subscriber est sysname, sans valeur par défaut.

[ @destination_db = ] N’destination_db'

Nom de la base de données de destination @destination_db est sysname, sans valeur par défaut.

[ @publisher = ] N’publisher'

Spécifie un serveur de publication non-SQL Server. @publisher est sysname, avec la valeur par défaut NULL.

@publisher ne doit pas être utilisé pour une publication qui appartient à un serveur de publication SQL Server.

Valeurs des codes de retour

0 (réussite) or 1 (échec).

Notes

sp_marksubscriptionvalidation est utilisé dans la réplication transactionnelle.

sp_marksubscriptionvalidation ne prend pas en charge les abonnés non-SQL Server.

Pour les serveurs de publication non-SQL Server, vous ne pouvez pas exécuter sp_marksubscriptionvalidation à partir d’une transaction explicite. Cela est dû au fait que les transactions explicites ne sont pas prises en charge via la connexion de serveur lié utilisée pour accéder au serveur de publication.

sp_marksubscriptionvalidationdoit être utilisé avec sp_article_validation, en spécifiant une valeur de 1 @subscription_level, et peut être utilisé avec d’autres appels pour sp_marksubscriptionvalidation marquer la transaction ouverte actuelle pour d’autres abonnés.

autorisations

Seuls les membres du rôle serveur fixe sysadmin ou db_owner rôle de base de données fixe peuvent s’exécuter sp_marksubscriptionvalidation.

Exemples

La requête suivante peut être appliquée à la base de données de publication pour publier des commandes de validation au niveau des abonnements. Ces commandes sont récupérées par les Agents de distribution des Abonnés spécifiés. La première transaction valide l’article art1, tandis que la deuxième transaction valide art2. Les appels à sp_marksubscriptionvalidation et sp_article_validation sont encapsulés dans une transaction. Nous vous recommandons de n’appeler qu’un seul appel à sp_article_validation par transaction. Cela est dû au fait que sp_article_validation contient un verrou de table partagé sur la table source pendant la transaction. Les transactions courtes sont à privilégier pour maximiser l'accès simultané.

BEGIN TRANSACTION;

EXEC sp_marksubscriptionvalidation @publication = 'pub1',
    @subscriber = 'Sub',
    @destination_db = 'SubDB';

EXEC sp_marksubscriptionvalidation @publication = 'pub1',
    @subscriber = 'Sub2',
    @destination_db = 'SubDB';

EXEC sp_article_validation @publication = 'pub1',
    @article = 'art1',
    @rowcount_only = 0,
    @full_or_fast = 0,
    @shutdown_agent = 0,
    @subscription_level = 1;

COMMIT TRANSACTION;

BEGIN TRANSACTION;

EXEC sp_marksubscriptionvalidation @publication = 'pub1',
    @subscriber = 'Sub',
    @destination_db = 'SubDB';

EXEC sp_marksubscriptionvalidation @publication = 'pub1',
    @subscriber = 'Sub2',
    @destination_db = 'SubDB';

EXEC sp_article_validation @publication = 'pub1',
    @article = 'art2',
    @rowcount_only = 0,
    @full_or_fast = 0,
    @shutdown_agent = 0,
    @subscription_level = 1;

COMMIT TRANSACTION;