【发布时间】: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 来实际按名称选择列,如果你不想写出来的话。