2013-08-14 5 views
4

Есть ли эквивалентСовокупные SQL ResultSet в значение HashBytes

CHECKSUM_AGG(CHECKSUM(*)) 

для HashBytes?

Я знаю, что вы можете сделать

SELECT 
    HashBytes('MD5', 
     CONVERT(VARCHAR,Field1) + '|' 
     + CONVERT(VARCHAR,Field2) + '|' 
     + CONVERT(VARCHAR,field3) + '|' 
    ) 
FROM MyTable 

Но я не уверен, как агрегировать все расчетные hashbyte записи в одно значение внутри SQL.

Одна из причин, по которой я хотел бы это сделать, - определить, изменились ли данные в исходной таблице с момента предыдущего загрузки, прежде чем перемещать данные в мою систему.

+0

Попробуйте делать выбор hashbyte на все? – Elias

+4

Это не отвечает на ваш вопрос, но если вы пытаетесь определить, изменились ли данные, вы должны изучить [rowversion] (http://technet.microsoft.com/en-us/library/ms182776.aspx). –

ответ

1

Если вы хотите проверить, изменилась ли данная строка, я настоятельно рекомендую вам использовать столбец «timestamp». Значение автоматически обновляется сервером Sql в каждой модификации строки. Затем, если строка изменена, после изменения будет отличаться значение, и вы можете заметить ее без реализации логики или запроса всей таблицы.

Но если вы хотите знать, если хотя бы одна строка была обновлена, я рекомендую вам использовать:

DECLARE @Tablename SYSNAME = «MyTable»;

SELECT modify_date FROM sys.tables WHERE name = @Tablename;

(Если вы используете .NET в вашем бизнес-уровне это может быть интересно для вас, чтобы посмотреть на SqlDependency)