2009年1月8日 星期四

奇怪的CHECKSUM函數

最近剛好在研究SSIS,想說如何做到當資料有異動時去更新資料,上網查到一篇文章Using a checksum to determine if a row has changed,我才知道原來有CHECKSUM這個函數啊

這個函數有趣的地方是,它會針對你給的資料清單,清單可以是資料行,然後產生一組湊雜(hash)值,線上叢書這麼稱呼的啦,比如說
SELECT CHECKSUM('a1','adalf')
--256163607
SELECT CHECKSUM('al','adalf')
--1620787439
看到沒,如果給的值不相同,產生的湊雜值也不同
用這個值當索引,就可以當湊雜索引囉
用這個值當作比較,也可以用來判斷資料是否不一樣,不一樣就需要更新
那我就想到也許可以拿來當作unique index啊
如果原本索引欄位很長,透過這個轉變索引成數值欄位,效能應該會更好
問題是線上叢書竟然說
如果變更了運算式清單中的其中一個值,清單的總和檢查碼通常也會改變。不過,總和檢查碼也有可能不會變更。
哇哩勒,意思就是不保證唯一啦,還可能會重複,連當作比較都有問題
那這樣還可以拿來作什啊,真是不好用

0 意見:

張貼留言