0

0

使用 BINARY_CHECKSUM 检测表的行中的更改

php中文网

php中文网

发布时间:2016-06-07 14:56:50

|

1648人浏览过

|

来源于php中文网

原创

使用 BINARY_CHECKSUM 检测表的行中的更改 无 USE AdventureWorks2012;GOCREATE TABLE myTable (column1 int, column2 varchar(256));GOINSERT INTO myTable VALUES (1, 'test');GOSELECT BINARY_CHECKSUM(*) from myTable;GOUPDATE myTable set column2 = '

使用 BINARY_CHECKSUM 检测表的行中的更改

USE AdventureWorks2012;
GO
CREATE TABLE myTable (column1 int, column2 varchar(256));
GO
INSERT INTO myTable VALUES (1, 'test');
GO
SELECT BINARY_CHECKSUM(*) from myTable;
GO
UPDATE myTable set column2 = 'TEST';
GO
SELECT BINARY_CHECKSUM(*) from myTable;
GO
使用方法如下:
select id,binary_checksum(*) from tb1
select id binary_checksum(*) from tb2
你比较两个表的校验值即可,若校验值相同,则表示通过。

--------------------------------------------
详细如下:
select A.id from 
(select id,CA=binary_checksum(*) from tb1) A where A.CA not in (select B.CB from
(select id,CB=binary_checksum(*) from tb2) B 
 
---------------

 发表于 2006-7-2 19:33 |只看该作者 当然,若你单纯想快速的检验表与表之间是否相同,就直接用sp_table_validation吧。
实际上它的核心也是使用了binary_checksum 
-----------------
Either returns rowcount or checksum information on a table or indexed view, or compares the provided rowcount or checksum information with the specified table or indexed view. This stored procedure is executed at the Publisher on the publication database and at the Subscriber on the subscription database. Not supported for Oracle Publishers.

Syntax

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' ]
sp_table_validation
或者返回有关表或索引视图的行数或校验值信息,或者将提供的行数或校验值信息与指定的表或索引视图进行比较。此存储过程在发布服务器的发布数据库上执行。

语法
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_rowcount OUTPUT

指定是否返回表中的预期行数。expected_rowcount 的数据类型为 int,默认值为 NULL。如果为 NULL,则表示将实际的行数作为输出参数返回。如果提供了值,则将对照实际的行数检查该值以确定任何差异。

[@expected_checksum =] expected_checksum OUTPUT

指定是否返回表的预期校验值。expected_checksum 的数据类型为 numeric,默认值为 NULL。如果为 NULL,则表示将实际的校验值作为输出参数返回。如果提供了值,则将对照实际的校验值检查该值以确定任何差异。

[@rowcount_only =] type_of_check_requested

指定执行的校验值类型或行数。type_of_check_requested 的数据类型为 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 的数据类型为 bit,默认值为 0。如果为 0,则复制代理程序不关闭。如果为 1,则将产生 20578 号错误,并通知复制代理程序关闭。

[@table_name =] table_name

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

[@column_list = ] 'column_list'

是用于 binary_checksum 函数的列的列表。column_list 的数据类型为 nvarchar(4000),默认值为 NULL。启用合并项目验证,以指定排除计算列和时间戳列的列的列表。

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

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

注释
sp_table_validation 用于所有类型的复制。

校验值在页的整个行映像上计算 32 位循环冗余检查 (CRC)。它不是有选择地检查列,并且不能在视图或表的垂直分区上操作。另外,校验值跳过 text 和 image 列的内容(根据设计)。

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

如果使用了字符模式的 bcp(当发布中包含异类订阅服务器时会发生这种情况),则浮点值很可能产生校验值差异。这是由于在进行字符模式转换时,精度上存在不可避免的微小差异。

权限
只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_table_validation。


请参见

sp_article_validation

sp_publication_validation

系统存储过程

  

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

1

2026.02.24

Golang 性能优化专题:提升应用效率
Golang 性能优化专题:提升应用效率

《Golang 性能优化专题》聚焦 Go 应用在高并发与大规模服务中的性能问题,从 profiling、内存分配、Goroutine 调度、GC 机制到 I/O 与锁竞争逐层分析。结合真实案例讲解定位瓶颈的方法与优化策略,帮助开发者建立系统化性能调优思维,在保证代码可维护性的同时显著提升服务吞吐与稳定性。

2

2026.02.24

Golang 面试题精选:高频问题与解答
Golang 面试题精选:高频问题与解答

Golang 面试题精选》系统整理企业常见 Go 技术面试问题,覆盖语言基础、并发模型、内存与调度机制、网络编程、工程实践与性能优化等核心知识点。每道题不仅给出答案,还拆解背后的设计原理与考察思路,帮助读者建立完整知识结构,在面试与实际开发中都能更从容应对复杂问题。

1

2026.02.24

Golang 运行与部署实战:从本地到云端
Golang 运行与部署实战:从本地到云端

《Golang 运行与部署实战》围绕 Go 应用从开发完成到稳定上线的完整流程展开,系统讲解编译构建、环境配置、日志与配置管理、容器化部署以及常见运维问题处理。结合真实项目场景,拆解自动化构建与持续部署思路,帮助开发者建立可靠的发布流程,提升服务稳定性与可维护性。

3

2026.02.24

Golang 疑难杂症解决指南:常见问题排查与优化
Golang 疑难杂症解决指南:常见问题排查与优化

《Golang 疑难杂症解决指南》聚焦开发过程中常见却棘手的问题,从并发模型、内存管理、性能瓶颈到工程化实践逐步拆解。通过真实案例与调试思路,帮助开发者定位问题根因,建立系统化排查方法。不只给出答案,更强调分析路径与工具使用,让你在复杂 Go 项目中具备持续解决问题的能力。

1

2026.02.24

Golang 入门学习路线:从零基础到上手开发
Golang 入门学习路线:从零基础到上手开发

Golang 入门路线涵盖从零到上手的核心路径:首先打牢基础语法与切片等底层机制;随后攻克 Go 的灵魂——接口设计与 Goroutine 并发模型;接着通过 Gin 框架与 GORM 深入 Web 开发实战;最后在微服务与云原生工具开发中进阶,旨在培养具备高性能并发处理能力的后端工程师。

0

2026.02.24

中国研究生招生信息网官方网站入口 研招网网页版在线入口
中国研究生招生信息网官方网站入口 研招网网页版在线入口

中国研究生招生信息网入口(https://yz.chsi.com.cn) 此网站是研究生报名入口的唯一官方网站

95

2026.02.24

苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法
苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法

本专题汇总苹果官网最新可用入口及中国站点访问方式,涵盖官网直达链接、iPhone官方页面查看方法与常见访问说明,帮助用户快速进入苹果官方网站,便捷了解产品信息与官方服务。

14

2026.02.24

Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址
Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址

本专题系统整理Asianfanfics(AFF)官方网站最新可用入口,涵盖官方平台最新直达地址、官网登录方式及中文访问指引,帮助用户快速、安全地进入AFF平台浏览与使用相关内容。

15

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 12万人学习

CSS3 教程
CSS3 教程

共18课时 | 6.1万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号