如何创建选择语句输出的校验和

Posted

技术标签:

【中文标题】如何创建选择语句输出的校验和【英文标题】:How to create checksum of the output of a select statement 【发布时间】:2022-01-14 10:53:21 【问题描述】:

我有 15 个不同的系统(有 15 个 SQL 数据库)。有一个定制表,它应该在任何地方都有相同的内容。它包含少于 30 行,所以使用

select * from table

不重。我想比较系统中表格的输出,但我不想逐行、逐个单元格地比较,我只需要一个包含每个单元格标记的哈希(校验和)。这在 T-SQL 中可行吗?

【问题讨论】:

您可以使用 CHECKSUM 或 BINARY_CHECKSUM 函数,但请务必阅读文档以了解其局限性。这是文档docs.microsoft.com/en-us/sql/t-sql/functions/… 的链接 一个简短的方法是每行BINARY_CHECKSUM(*),然后将它们与CHECKSUM_AGG 聚合起来。缺点是BINARY_CHECKSUM 是一个糟糕的校验和函数,有很多潜在的冲突(但是,它比CHECKSUM 差得多)。使用HASHBYTES 的更复杂的方法需要编写一些动态 SQL 来实际按名称选择列,如果你不想写出来的话。 【参考方案1】:

您可以连接所有列然后进行校验和。 例如:

select binary_checksum(concat(col1,'|',col2,'|',col3,'|',col4)) from table

您将比较校验和输出,而不是比较长字符串。

【讨论】:

以上是关于如何创建选择语句输出的校验和的主要内容,如果未能解决你的问题,请参考以下文章

如何在IOS中使用校验和(md5sum)等唯一字段识别照片

解析和校验Flink SQL语句

解析和校验Flink SQL语句

MySQL库的操作

计算 CRC16 校验和的函数

JAVA编程,校验身份证并提取其中的出生年月