sp_table_validation (Transact-SQL)
适用范围:SQL Server
返回有关表或索引视图的行数或校验和信息,或者将提供的行数或校验和信息与指定的表或索引视图进行比较。 此存储过程在发布服务器上的发布数据库中执行,或者在订阅服务器上的订阅数据库中执行。
注意
sp_table_validation
Oracle 发布服务器不支持。
语法
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_fast 为 tinyint,默认值 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 权限。