将BINARY_CHECKSUM(*)与多个表一起使用

时间:2012-01-27 18:38:20

标签: sql sql-server sql-server-2008

我正在尝试使用遗留应用程序进行非常hacky跟踪练习。

我打算做的是将每行的BINARY_CHECKSUM值存储在一个单独的表中,以便在我的应用中进行比较。

想象一下,我有2个表 - TableA,TableB
两者都有一个ProductID列(所以可以将两个表连接在一起)

我正在寻找类似的查询:

SELECT a.ProductID, a.BINARY_CHECKSUM(*)AS Hash1, b.BINARY_CHECKSUM(*) AS Hash2 FROM 
TableA a
JOIN
TableB b
ON a.ProductID = b.ProductID

这显然不起作用......但是沿着这些方向的东西,所以结果将是(例如)

ProductID |哈希1 | HASH2
1234 | --439419708 | -35860977

2 个答案:

答案 0 :(得分:0)

这可能有效:

SELECT a.ProductID, Hash1, Hash2
FROM (select ProductID, BINARY_CHECKSUM(*) AS Hash1 from TableA a) a
JOIN (select ProductID, BINARY_CHECKSUM(*) AS Hash1 from TableB b) b on ...

您的问题只是语法问题。你的方法会奏效。

答案 1 :(得分:0)

你可能会尝试这样做:

with a as (
select BINARY_CHECKSUM(*) as CheckSum,
*
from TableA
),
b as (
select BINARY_CHECKSUM(*) as CheckSum,
*
from TableB
)
select 
a.keyField, a.CheckSum, b.CheckSum
from 
a
full outer join
b
on a.keyField = b.keyField
where a.CheckSum <> b.CheckSum