2

私のアプリケーションはデータベースを継続的にポーリングしています。最適化のために、テーブルが変更された場合にのみ、アプリケーションがデータベースにクエリを実行するようにします。したがって、テーブル全体の HASH を計算し、テーブルの最後に保存されたハッシュと比較したいと考えています。(最初に各行のHASHを計算し、次にそれらのハッシュ、つまりHASHのHASHを計算してハッシュを計算する予定です)

1 行の HASH/Checksum を計算する SQL Server 用の Checksum() sql ユーティリティ関数があることがわかりました。

SQL Anywhere 11 データベースの行の HASH を見つけるための同様のユーティリティ/クエリはありますか?

参考までに、データベース テーブルには、事前計算された HASH/チェックサムの列がありません。

4

2 に答える 2

1

答えを得た。以下のクエリを使用して、テーブルの特定の列のハッシュを計算できます。

-- SELECT HASH(coulum_name, hash_algorithm) 
-- For example:
SELECT HASH(coulmn, 'md5') 
FROM MyTable
于 2011-03-01T11:32:42.053 に答える
1

これにより、テーブルのすべてのデータに対してハッシュが作成され、任意の列の変更が検出されます。

CREATE VARIABLE @tabledata LONG VARCHAR;
UNLOAD TABLE MyTable INTO VARIABLE @tabledata ORDER ON QUOTES OFF COMPRESSED;
SET @tabledata = Hash(@tabledata);
IF (@tabledata <> '40407ede9683bcfb46bc25151139f62c') THEN
    SELECT @tabledata AS hash;
    SELECT * FROM MyTable;
ENDIF;
DROP VARIABLE @tabledata;

もちろん、これはコストがかかるため、データが数百メガバイトの場合は使用しないでください。しかし、他の唯一の方法が変更のすべてのデータを比較することである場合、これはより高速であり、db サーバーでのみ負荷とメモリ消費を生成します。

変更検出が少数の列に対してのみ必要な場合は、UNLOAD SELECT col FROM table INTO ...代わりに使用できます。

于 2013-08-21T13:39:14.633 に答える