標籤:
今天特地查了一下SQL Server下的校檢函數有哪些。原本我只是在工作中用過一個CHECKSUM,今天特地學習了一下才發現原來還有其他的校檢函數。
這裡找到了別人對於SQL SERVER下這幾個校檢函數的學習總結,藉此機會學習下別人的學習成果
http://bbs.51cto.com/thread-1145105-1.html
CHECKSUM和BINARY_CHECKSUM
- CHECKSUM和BINARY_CHECKSUM都是可以針對錶中一行的單列或者多列又或是運算式產生資料類型為INT的校檢值。
- 不同的地方是BINARY_CHECKSUM是轉成了二進位後產生的校檢值。
- 並不是所有的資料類型都可以用到CHECKSUM或BINARY_CHECKSUM上的。BINARY_CHECKSUM 在計算中忽略具有不可比資料類型的列。 不可比資料類型包括 text、ntext、image、cursor、xml 和不可比公用語言運行庫 (CLR) 使用者定義的類型。
- MSDN上講到BINARY_CHECKSUM 可用於檢測表中行的更改。但是也提到BINARY_CHECKSUM(*) 將為大多數(但不是全部)行更改返回不同的值,並可用於檢測大多數行修改。
- 因為校檢值是一個INT,根據INT的數值分布[-2147483648,2147483647],如果某長表中的行數大於2億估計就會出現重複的情況了。這點在以前工作中就碰到過。
- CHECKSUM和BINARY_CHECKSUM的不同是:1)CHECKSUM是不區分大小寫。它認為Jerry和jerry是同樣的校檢值;2)如果兩個運算式具有相同的類型和位元組表示,那麼對於 BINARY_CHECKSUM 將返回相同的值。例如,BINARY_CHECKSUM 對於“2Volvo Director 20”和“3Volvo Director 30”將會返回相同的值。這段參考了http://ultrasql.blog.51cto.com/9591438/1607407
CHECKSUM_AGG
這個是個彙總函式。返回組中各值的校正和。 將忽略 Null 值。 後面可以跟隨 OVER 子句。CHECKSUM_AGG 用於檢測表中的更改。如果運算式列表中的某個值發生更改,則列表的校正和通常也會更改。 但只在極少數情況下,校正和會保持不變。很多情況下這個函數應該是用來檢測表的資料是否有改動或者表的某個欄位的資料是否有發生改動。
HASHBYTES返回其在 SQL Server 中的輸入的 MD2、MD4、MD5、SHA、SHA1 或 SHA2 雜湊值。可以用MD5替換CHECKSUM或BINARY_CHECKSUM避免重複。但是效能上可能有所下降。
SQL Server ->> 校檢函數CHECKSUM、CHECKSUM_AGG、BINARY_CHECKSUM和HASHBYTES