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 语句并执行它要使用的表。
我正在使用 Microsoft Sql 服务器。我得到了 table [Test1]:
的 CHECKSUMSelect 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 语句并执行它要使用的表。