Использование BINARY_CHECKSUM (*) с несколькими таблицами - PullRequest
1 голос
/ 27 января 2012

Я пытаюсь выполнить очень хакерское упражнение по отслеживанию изменений, используя устаревшее приложение.

Я планирую сохранить значения BINARY_CHECKSUM каждой строки в отдельной таблице для сравнения в моем приложении.

Представьте, что у меня есть 2 таблицы - Таблица A, Таблица B
Оба имеют столбец 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 | Hash1 | Hash2
1234 | --439419708 | -35860977

Ответы [ 2 ]

0 голосов
/ 12 ноября 2014

Вы могли бы что-то попробовать:

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
0 голосов
/ 27 января 2012

Это может сработать:

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 ...

Ваша проблема - просто проблема синтаксиса. Ваш подход будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...