sp_table_validation (Transact-SQL)
返回有关表或索引视图的行数或校验和信息,或者将提供的行数或校验和信息与指定的表或索引视图进行比较。 此存储过程在发布服务器上的发布数据库中执行,或者在订阅服务器上的订阅数据库中执行。 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'
表的名称。 table 的数据类型为 sysname,无默认值。[ @expected_rowcount=] expected_rowcountOUTPUT
指定是否返回表中的预期行数。 expected_rowcount 的数据类型为 int,默认值为 NULL。 如果为 NULL,则将实际行数作为输出参数返回。 如果提供了一个值,则针对实际行数检查该值,以标识二者之间的差异。[ @expected_checksum=] expected_checksumOUTPUT
指定是否返回表的预期校验和。 expected_checksum 的数据类型为 numeric,默认值为 NULL。 如果为 NULL,则将实际校验和作为输出参数返回。 如果提供了一个值,则针对实际校验和检查该值,以标识二者之间的差异。[ @rowcount_only=] type_of_check_requested
指定要执行的校验和或行数的类型。 type_of_check_requested 的数据类型为 smallint,默认值为 1。如果为 0,则执行行计数和与 Microsoft 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,通知复制代理关闭。 如果 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 用于所有类型的复制。 Oracle 发布服务器不支持 sp_table_validation。
校验和对页上的整个行图像上计算 32 位循环冗余检查 (CRC)。 它不是有选择地检查列,并且不能对视图或表的垂直分区进行操作。 另外,校验和跳过 text 和 image 列的内容(由设计决定)。
执行校验和检查时,两个服务器的表结构必须完全相同;也就是说,表中包含的列必须相同,且列的顺序、数据类型和长度以及 NULL/NOT NULL 条件都必须相同。 例如,如果发布服务器执行 CREATE TABLE,然后执行 ALTER TABLE 以添加列,但是订阅服务器上应用的脚本是一个简单的 CREATE 表,则表结构不相同。 如果不能确定两个表的结构是否相同,可以查看 syscolumns,确定每个表中的偏移量是否相同。
当发布中包含非 SQL Server 订阅方时,如果使用了字符模式的 bcp,则浮点值很可能产生校验和差异。 这是由于在进行字符模式转换时,精度上存在不可避免的微小差异。
权限
若要执行 sp_table_validation,必须对正在验证的表拥有 SELECT 权限。
请参阅
参考
sp_article_validation (Transact-SQL)