CHECKSUM_AGG 多个表

CHECKSUM_AGG for several tables

我正在使用 Microsoft Sql 服务器。我得到了 table [Test1]:

的 CHECKSUM
Select CHECKSUM_AGG(binary_checksum(*)) from [MyDB].[dbo].[Test1]

我得到:1878191716

请告诉我,我怎样才能一次获得多个 table 的校验和?(例如,对于 [Test1]、[Test2] 和 [测试 3])

p.s。表是不同的。 table 的数量超过 10 个。我需要一个 CHECKSUM。 我观察是否至少有一个 table 发生了变化。

假设它们有相同的列,你可以使用union all:

Select CHECKSUM_AGG(binary_checksum(*))
from ((select t.* from [MyDB].[dbo].[Test1] t) union all
      (select t.* from [MyDB].[dbo].[Test2] t) union all
      (select t.* from [MyDB].[dbo].[Test3] t) 
     ) t;

如果它们没有相同的列,我建议您计算三个单独的值。

您需要首先获取相关表中所有行的BINARY_CHECKSUM值,然后然后获取CHECKSUM_AGG,因此:

;WITH EveryRow(Val) AS (
SELECT BINARY_CHECKSUM(*) FROM Table1
UNION ALL
SELECT BINARY_CHECKSUM(*) FROM Table2
UNION ALL
SELECT BINARY_CHECKSUM(*) FROM Table3
-- etc
)
SELECT CHECKSUM_AGG(Val)
FROM EveryRow
;

如果您想 compute 而不是 list,则需要动态构建 SQL 语句并执行它要使用的表。