sp_table_validation (Transact-SQL)

返回有关表或索引视图的行数或校验和信息,或者将提供的行数或校验和信息与指定的表或索引视图进行比较。此存储过程在发布服务器中针对发布数据库执行,或在订阅服务器中针对订阅数据库执行。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'
    表的名称。tablesysname,没有默认值。
  • [ @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)。它不是有选择地检查列,并且不能对视图或表的垂直分区进行操作。另外,校验和跳过 textimage 列的内容(由设计决定)。

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

当发布中包含非 SQL Server 订阅方时,如果使用了字符模式的 bcp,则浮点值很可能产生校验和差异。这是由于在进行字符模式转换时,精度上存在不可避免的微小差异。

权限

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

请参阅

参考

CHECKSUM (Transact-SQL)
@@ROWCOUNT (Transact-SQL)
sp_article_validation (Transact-SQL)
sp_publication_validation (Transact-SQL)
系统存储过程 (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助