Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проверка идентичности данных в таблицах: Checksum / binary_checksum / hashbytes  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
Привет, как сделать проверку идентичны-ли таблицы или нет?
Не в смысле проверять каждое значение - а в смысле результат идентичны или нет (True/False или 0/1)?

Делаю через chesksum / binary_checksum но похоже выводит для каждой строки,
если делаю Sum(checksum(..)) или Var или что там ещё - то есть некоторая
недопустимо высокая вероятность совпадения результата при различии данных
(проблему переполнения естественно решает что-то типа cast(.. as real)),
т.е. вопрос как сделать хэш сначала на всю колонну (а не на каждое значение колонны/столбца)
и потом на всю таблицу (из полученных хэшей колонн, конечно можно колонны
слить в одну каким-нибудь concat() и пр.)? Ну или-же сразу на всю таблицу
..
чтобы потом iif(x=y,'Идентичны','Различны')?
11 май 14, 17:34    [16000374]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum / binary_checksum / hashbytes  [new]
aleks2
Guest
if exists(select * from T1 except select * from T2)
or exists(select * from T2 except select * from T1)
print 'Оне разные'
11 май 14, 17:47    [16000422]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum / binary_checksum / hashbytes  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
aleks2, Неплохое решение но ещё раз уточню - не в смысле сверять каждое значение .. на самом деле производительность такого запроса немного не устраивает.
11 май 14, 18:05    [16000471]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
CHECKSUM_AGG
11 май 14, 18:12    [16000492]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum / binary_checksum / hashbytes  [new]
aleks2
Guest
vikkiv
aleks2, Неплохое решение но ещё раз уточню - не в смысле сверять каждое значение .. на самом деле производительность такого запроса немного не устраивает.

Т.е. ты полагаешь, что хэш оно будет считать силою святага духа - без чтения таблицы?
А если "с чтением" - дык, какая, нафег, разница?
11 май 14, 18:15    [16000497]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum  [new]
Glory
Member

Откуда:
Сообщений: 104760
vikkiv
Привет, как сделать проверку идентичны-ли таблицы или нет?
Не в смысле проверять каждое значение - а в смысле результат идентичны или нет

А как можно сказать, что таблицы (не)идентичны, если не сравнить все значения ?
11 май 14, 18:18    [16000503]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum / binary_checksum / hashbytes  [new]
aleks2
Guest
invm
CHECKSUM_AGG

CHECKSUM_AGG (Transact-SQL)
Возвращает контрольную сумму значений в группе. Значения NULL не учитываются.

Какая тут "идентичность"?
11 май 14, 18:18    [16000504]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum / binary_checksum / hashbytes  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
aleks2, незнаю почему - но твоё решение и sum(checksum..) в разы по скорости отличаются, данные 10 мил. + строк..
Спасибо всё равно, тоже подходит, за идеальные решения боротся - жизни не хватит.
11 май 14, 19:22    [16000677]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum / binary_checksum / hashbytes  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
П.С. checksum_agg можно так использовать: select checksum_agg(checksum(*))from tn
11 май 14, 20:22    [16000909]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum / binary_checksum / hashbytes  [new]
aleks2
Guest
vikkiv
aleks2, незнаю почему - но твоё решение и sum(checksum..) в разы по скорости отличаются, данные 10 мил. + строк..
Спасибо всё равно, тоже подходит, за идеальные решения боротся - жизни не хватит.

Это у тя, страдалец, нибось кластерного индекса на таблицах нема.
12 май 14, 05:51    [16002038]     Ответить | Цитировать Сообщить модератору
 Re: Проверка идентичности данных в таблицах: Checksum / binary_checksum / hashbytes  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
except сортирует, на это тратится большая часть времени. Агрегирование же сводится к сканированию таблицы и математическим операциям.
12 май 14, 10:55    [16002876]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить