【问题标题】:How to create checksum of the output of a select statement如何创建选择语句输出的校验和
【发布时间】:2023-04-08 16:29:01
【问题描述】:

我有 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 来实际按名称选择列,如果你不想写出来的话。

标签: sql tsql hash


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多