Transact-SQL 参考

sp_table_validation

或者返回有关表或索引视图的行数或校验值信息,或者将提供的行数或校验值信息与指定的表或索引视图进行比较。此存储过程在发布服务器的发布数据库上执行。

语法

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' ]

参数

[@table =] 'table'

是表名。table 的数据类型为 sysname,无默认值。

[@expected_rowcount =] expected_rowcount OUTPUT

指定是否返回表中的预期行数。expected_rowcount 的数据类型为 int,默认值为 NULL。如果为 NULL,则表示将实际的行数作为输出参数返回。如果提供了值,则将对照实际的行数检查该值以确定任何差异。

[@expected_checksum =] expected_checksum OUTPUT

指定是否返回表的预期校验值。expected_checksum 的数据类型为 numeric,默认值为 NULL。如果为 NULL,则表示将实际的校验值作为输出参数返回。如果提供了值,则将对照实际的校验值检查该值以确定任何差异。

[@rowcount_only =] type_of_check_requested

指定执行的校验值类型或行数。type_of_check_requested 的数据类型为 smallint,默认值为 1。如果为 0,则执行 SQL Server 7.0 兼容的校验值。如果为 1,则只执行行数检查。如果为 2,则执行行数和校验值。

[@owner =] 'owner'

是表所有者的名称。owner 的数据类型为 sysname,默认值为 NULL。

[@full_or_fast =] full_or_fast

是计算行数的方法。full_or_fast 的数据类型为 tinyint,默认值为 2,可以是下列值之一。

描述
0 用 COUNT(*) 进行完整计数。
1 sysindexes.rows 进行快速计数。在 sysindexes 中对行进行计数比在实表中计数快得多。但由于很少对 sysindexes 进行更新,所以行计数可能不准确。
2(默认值) 首先使用快速方法进行条件快速计数。如果快速方法显示出差异,则转而使用完整方法。如果 expected_rowcount 的值为 NULL,而且正在使用存储过程获取该值,则始终使用完整 COUNT(*)。

[@shutdown_agent =] shutdown_agent

如果分发代理程序正在执行 sp_table_validation,则指定分发代理程序是否在验证完成后立即关闭。shutdown_agent 的数据类型为 bit,默认值为 0。如果为 0,则复制代理程序不关闭。如果为 1,则将产生 20578 号错误,并通知复制代理程序关闭。

[@table_name =] table_name

是用于输出消息的视图的表名。table_name 的数据类型为 sysname,默认值为 @table

[@column_list = ] 'column_list'

是用于 binary_checksum 函数的列的列表。column_list 的数据类型为 nvarchar(4000),默认值为 NULL。启用合并项目验证,以指定排除计算列和时间戳列的列的列表。

返回代码值

如果执行校验值验证并且预期的校验值与表中的校验值相等,sp_table_validation 将返回一条消息指出该表已通过校验值验证。否则,将返回一条消息指出表可能不同步,并报告预期的行数和实际行数之间的差异。

如果执行行数验证并且预期的行数与表中的行数相等,sp_table_validation 将返回一条消息指出该表已通过行数验证。否则,将返回一条消息指出表可能不同步,并报告预期的行数和实际行数之间的差异。

注释

sp_table_validation 用于所有类型的复制。

校验值在页的整个行映像上计算 32 位循环冗余检查 (CRC)。它不是有选择地检查列,并且不能在视图或表的垂直分区上操作。另外,校验值跳过 textimage 列的内容(根据设计)。

执行校验值检查时,两个服务器的表结构必须完全相同;也就是说,表中包含的列必须相同,且列的顺序、数据类型和长度以及 NULL/NOT NULL 条件都必须相同。例如,如果发布服务器使用 CREATE TABLE,然后使用 ALTER TABLE 添加列,但是发布服务器上应用的脚本是一个简单的 CREATE 表,则表结构不相同。如果不能确定两个表的结构是否相同,可以查看 syscolumns 并确定每个表中的偏移量是否相同。

如果使用了字符模式的 bcp(当发布中包含异类订阅服务器时会发生这种情况),则浮点值很可能产生校验值差异。这是由于在进行字符模式转换时,精度上存在不可避免的微小差异。

权限

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

请参见

sp_article_validation

sp_publication_validation

系统存储过程