如何创建选择语句输出的校验和
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
您将比较校验和输出,而不是比较长字符串。
【讨论】:
以上是关于如何创建选择语句输出的校验和的主要内容,如果未能解决你的问题,请参考以下文章