Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вычисление hashsum (MD5, SHA1, etc) записи  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Сабж. Имеется необходимость отслеживать изменения в наборе записей, возвращаемых вьюхой. По некоторым причинам нет возможности вешать триггеры на таблицы, задействованные во вьюхе, да и сама она достаточно сложная - в ней порядка 10 таблиц, и данные могут быть изменены в любой из этих таблиц. В результирующем наборе ~20 тыс. записей, 30 полей на запись. Поскольку не требуется отслеживать, какое именно поле изменилось, а требуется фиксировать просто факт изменения записи (все записи имеют уникальный идентификатор), то возникла идея в отдельной таблице фиксировать hashsum каждой записи, а потом просто сравнивать по записям вычисленный хэш от того, что вернула вьюха, и сохранённый хэш. Собственно, интересует, есть ли для описанного какие-либо готовые решения, или надо кодить функцию вычисления хэша самому.
P.S. MSSQL 8.0.760, увы.
11 май 11, 12:47    [10634367]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление hashsum (MD5, SHA1, etc) записи  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Может TIMESHTAMP поможет???
11 май 11, 12:49    [10634381]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление hashsum (MD5, SHA1, etc) записи  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
В 2005 есть HashBytes где все относительно удобно:
select 
HashBytes('MD5', 
        ISNULL(CAST(AmountNett AS VARCHAR(50)),'')
        + ISNULL(CAST(AmountGross AS VARCHAR(50)),'') 
        + ISNULL(CAST(InvoiceOutNR AS VARCHAR(50)),'')
        + ISNULL(convert(VARCHAR(50), InvoiceOutDate, 120 ),'')
        + ISNULL(convert(VARCHAR(50), PaymentDate, 120),'')
       ) HashData   
from ..

В 2000, только самописные решения... к примеру:
http://www.codeproject.com/KB/database/xp_md5.aspx?msg=2225056
11 май 11, 13:08    [10634564]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление hashsum (MD5, SHA1, etc) записи  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Александр Волок (def1983),
спасибо, то, что надо. Поскольку данные через select..for xml/openxml с 2000-го сервера перебрасываются на сервер 2005, попробую приведенный код задействовать на принимающей стороне.
11 май 11, 13:24    [10634762]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление hashsum (MD5, SHA1, etc) записи  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
Сон Веры Павловны,

Сомнительный подход. На представление создавать постоянную таблицу с хэшем, вычислять заново, поддерживать изменения от зависимых таблиц., а хэш вычисляется не быстро.
В общем , что-то не так в консерватории, раз не очевидные решения.
11 май 11, 13:31    [10634837]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление hashsum (MD5, SHA1, etc) записи  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
Ken@t,

Скорее всего это лишь попытка реализовать альтернативу Change Data Capture, которая будет используется только при выгрузке/загрузке данных...
11 май 11, 13:38    [10634920]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление hashsum (MD5, SHA1, etc) записи  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Ken@t,

ну, описание задачи я привел - можете предложить что-то лучше? Могу ситуацию разъяснить немного подробнее. Имеются 2 системы: одна на сервере 2000, другая на сервере 2005. Между ними надо организовать обмен данными (однонаправленный), причем не as is - на принимающей стороне данные требуют достаточно объемной обработки. Ввиду всего это при вышеозвученном объеме (~20 тыс. записей) на транзакцию при обработке всех данных вне зависимости от того, изменилась отдельная запись в составе данных, или нет, уходит порядка 15 минут. Но достоверно известно, что между отработками процедуры обмена измененными оказываются около 10% записей. И да, я уже проверил - в данной ситуации вычисление хэша на порядок менее затратно, чем обработка записи в транзакции.
11 май 11, 13:43    [10634977]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление hashsum (MD5, SHA1, etc) записи  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
Сон Веры Павловны,

Хм. если решение подходит - то ради бога. Только мне сомнительно , ибо процесс (алгоритм) обновления данных один и тот же всегда.

Вопрос с детектед различий ? ну таки развернуть резалтсет с источника и 10 джойнов на актуальные таблицы ? Честно - не понятно где ваш затык.
11 май 11, 13:52    [10635097]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление hashsum (MD5, SHA1, etc) записи  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Ken@t,

я же выше написал - нет возможности использовать триггеры: система, поставляющие данные - не наша. Написана не нами, техсаппорт не наш, она просто крутится на нашем железе, и позволяет сверх того, что предоставляется штатным функционалом, только делать выборки.
11 май 11, 13:58    [10635161]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить