Transact-SQL 参考

sp_marksubscriptionvalidation

将当前打开的事务标记为指定订阅服务器的订阅级验证事务。必须与 sp_article_validation 一起使用,并使 @subscription_level 等于 1。还可以和其它对 sp_marksubscriptionvalidation 的调用一起使用,为其它订阅服务器标记当前打开的事务。此存储过程在发布服务器的发布数据库上执行。

语法

sp_marksubscriptionvalidation [ @publication = ] 'publication'
    , [ @subscriber = ] 'subscriber'
    , [ @destination_db = ] 'destination_db'

参数

[@publication =] 'publication'

是发布名。Publication 的数据类型为 sysname,无默认值。

[@subscriber = ] 'subscriber'

是订阅服务器名称。subscriber 的数据类型为 sysname,无默认值。

[@destination_db =] 'destination_db'

是目的数据库名。destination_db 的数据类型为 sysname,无默认值。

返回代码值

0(成功)或 1(失败)

注释

sp_marksubscriptionvalidation

用于所有类型的复制。此存储过程不支持异类订阅服务器。

权限

只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_marksubscriptionvalidation

示例

下面的查询可应用到发布数据库,以发布订阅级验证命令。下列命令将由指定的订阅服务器的分发代理程序挑选。

begin tran

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 tran

begin tran

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 tran

请注意,第一个事务验证项目"art1",而第二个事务验证"art2"。还请注意,已把对 sp_marksubscriptionvalidationsp_articlevalidation 的调用封装进了事务中。建议每个事务只调用一次 sp_articlevalidation。这是因为在事务的生存周期内,sp_article_validation 在源表上控制一个共享表锁。应尽量缩短事务以使并发最大化。

请参见

系统存储过程

验证已复制的数据