sp_table_validation (Transact-SQL)

适用范围:SQL Server

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

注意

sp_table_validation Oracle 发布服务器不支持。

Transact-SQL 语法约定

语法

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'

表的名称。 sysname,无默认值。

[ @expected_rowcount = ] expected_rowcount OUTPUT

指定是否返回表中的预期行数。 @expected_rowcount为 int,默认值为 NULL. 如果 NULL返回实际行计数作为输出参数。 如果提供了一个值,则针对实际行数检查该值,以标识二者之间的差异。

[ @expected_checksum = ] expected_checksum OUTPUT

指定是否返回表的预期校验和。 @expected_checksum为数字,默认值为 NULL. 如果 NULL返回实际校验和作为输出参数。 如果提供了一个值,则针对实际校验和检查该值,以标识二者之间的差异。

[ @rowcount_only = ] type_of_check_requested

指定要执行的校验和或行数的类型。 @rowcount_only为 smallint,默认值为 1.

如果 0执行行计数和与 SQL Server 7.0 兼容的校验和。

如果 1仅执行行计数检查。

如果 2执行行计数和二进制校验和。

[ @owner = ] 'owner'

表的所有者的名称。 @owner为 sysname,默认值为 NULL.

[ @full_or_fast = ] full_or_fast

用于计算行计数的方法。 @full_or_fasttinyint,默认值 2为 ,可以是这些值之一。

说明
0 使用 COUNT(*) 进行完整计数。
1 执行快速计数。sysindexes.rows 对行 sysindexes 进行计数比对实际表中的行进行计数要快得多。 但是,由于 sysindexes 已延迟更新,因此行计数可能不准确。
2(默认值) 首先尝试使用快速方法进行条件性快速计数。 如果快速方法显示出差异,则转而使用完整方法。 如果 expected_rowcount 并且 NULL 存储过程用于获取值,则始终使用完整 COUNT(*)

[ @shutdown_agent = ] shutdown_agent

如果分发代理正在执行sp_table_validation,则指定分发代理在完成验证后是否应立即关闭。 @shutdown_agent为,默认值为 0. 如果 0,复制代理不会关闭。 如果 1引发错误 20578,并指示复制代理关闭。 当用户直接执行此参数时 sp_table_validation ,将忽略此参数。

[ @table_name = ] 'table_name'

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

[ @column_list = ] 'column_list'

应在校验和函数中使用的列的列表。 column_list为 nvarchar(4000),默认值为 NULL. 启用合并项目验证,以指定不包括计算列和时间戳列的列列表。

返回代码值

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

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

注解

sp_table_validation 用于所有类型的复制。 sp_table_validation Oracle 发布服务器不支持。

校验和对页上的整个行图像上计算 32 位循环冗余检查 (CRC)。 它不会有选择地检查列,不能对表的视图或垂直分区进行操作。 此外,校验和会跳过文本图像列的内容(按设计)。

执行校验和时,表的结构在两个服务器之间必须相同:也就是说,表必须具有相同顺序存在的列、相同的数据类型和长度以及相同的 NULL/NOT NULL 条件。 例如,如果发布服务器执行了一个 CREATE TABLE,则 ALTER TABLE 添加列,但在订阅服务器上应用的脚本是一 CREATE 个简单的表,则结构 相同。 如果不确定两个表的结构相同,请查看 sys.syscolumns 并确认每个表中的偏移量相同。

如果使用字符模式 bcp ,则浮点值可能会生成校验和差异,在这种情况下,如果发布具有非 SQL Server 订阅服务器。 这是由于在进行字符模式转换时,精度上存在不可避免的微小差异。

权限

若要执行 sp_table_validation,必须对要验证的表具有 SELECT 权限。