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_检查um OUTPUT

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

[ @rowcount_only = ] type_of_检查_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,副本 (replica)tion 代理不会关闭。 如果1引发错误 20578,则会发出副本 (replica)代理的信号以关闭。 当用户直接执行此参数时 sp_table_validation ,将忽略此参数。

[ @table_name = ] 'table_name'

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

[ @column_list = ] 'column_list'

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

返回代码值

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

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

注解

sp_table_validation用于所有类型的副本 (replica)。 sp_table_validation Oracle 发布服务器不支持。

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

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

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

权限

若要执行sp_table_validation,必须对要验证的表具有 标准版LECT 权限。