- PR -

CHECKSUM値について

1
投稿者投稿内容
Yoko
常連さん
会議室デビュー日: 2004/11/16
投稿数: 20
投稿日時: 2005-01-26 15:37
いつもお世話になっております。

SQLServer2000を使用しています。

行に加えられた変更を検出するのにCHECKSUMを使おうと思ったのですが、
DECIMAL型の列の値を変更しても、CHECKSUM値が同じ結果で返ってきてしまいます。

試しに以下を実行しても、やはり戻り値が全く同じ結果になってしまいました。

---------------------------------------
DECLARE @val decimal(12,0)

SET @val = 10
SELECT BINARY_CHECKSUM(@val)

SET @val = 100000
SELECT BINARY_CHECKSUM(@val)
---------------------------------------

なぜなのでしょうか?

お分かりになる方がいらっしゃいましたらご教授ください。
よろしくお願いいたします。
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2005-01-28 15:53
引用:

Yokoさんの書き込み (2005-01-26 15:37) より:
いつもお世話になっております。

SQLServer2000を使用しています。

行に加えられた変更を検出するのにCHECKSUMを使おうと思ったのですが、
DECIMAL型の列の値を変更しても、CHECKSUM値が同じ結果で返ってきてしまいます。

試しに以下を実行しても、やはり戻り値が全く同じ結果になってしまいました。

---------------------------------------
DECLARE @val decimal(12,0)

SET @val = 10
SELECT BINARY_CHECKSUM(@val)

SET @val = 100000
SELECT BINARY_CHECKSUM(@val)
---------------------------------------

なぜなのでしょうか?

お分かりになる方がいらっしゃいましたらご教授ください。
よろしくお願いいたします。



チェックサムとは何かを考えると当たり前の気がしますが、
チェックサムは必ず一意にならないと思います。
CHECKSUMの内部で何をやっているのかわかりませんが、
同じ値になることがあっても仕方ないと思います。
HIRO
会議室デビュー日: 2005/01/28
投稿数: 2
投稿日時: 2005-01-28 17:29
CHECKSUM は、Japanese_BIN のみ BINARY_CHECKSUM として扱っていると思われます。
それ以外の場合は、特定の変換をかけているようですね。
Yoko
常連さん
会議室デビュー日: 2004/11/16
投稿数: 20
投稿日時: 2005-02-02 19:31
msoさん、HIROさん、ありがとうございます。

>msoさん
当然ながら(decimal(12,0)とCHECKSUMの返り値は)型のサイズが異なりますので
どんな値を与えても必ずユニークな値が返ってくるとは思っていないのですが、
10倍、100倍、1000倍...で同じ値というのはおかしいのではないかと思い
質問させていただきました。

>HIROさん
CHECKSUM、BINARY_CHECKSUM共に値は変わりませんでした。
照合順序も疑ってみたのですが、やはり値に変化はありませんでした。
1

スキルアップ/キャリアアップ(JOB@IT)