请教一下,
1、什么情况下使用checksum?2、checksum(para1)和checksum(para2)有可能得到相同的值吗(para1和para2是不同的值)
1、什么情况下使用checksum?2、checksum(para1)和checksum(para2)有可能得到相同的值吗(para1和para2是不同的值)
解决方案 »
- Windows上用XAMPP搭WordPress的问题(有一步关于建立mysql数据库)
- 如何拆分一个含有数字和字符的字段
- 合并表,两表行数不一样
- 超难问题 !!!!!! 如何用 T-SQL语句 判断 一个文件 是不是 SQL SERVER 的test 数据库有效的备份文件 ??? 急!!!!!???
- mssql里如何区分中英文标点符号?
- Select查询对于real类型显示问题请教。
- 100分紧急求救:安装sql 2000个人版的奇怪故障!
- 安装并注册了客户端组件(如 SQLLE.DLL)。已禁用对 58 的调试。
- 请教:ADO的COMMAND对象中,如何加入集合类型的参数,就时XX in ()的时候?
- 如何将另一台机器上MS SQL2000的数据库移到我的机器上?
- SQL语句求助
- 数据库
返回按照表的某一行或一组表达式计算出来的校验和值。CHECKSUM 用于生成哈希索引。 Transact-SQL 语法约定语法
CHECKSUM ( * | expression [ ,...n ] )
参数
*
指定对表的所有列进行计算。如果有任一列是非可比数据类型,则 CHECKSUM 返回错误。
非可比数据类型有 text、ntext、image、XML 和 cursor,还包括以上述任一类型作为
基类型的 sql_variant。expression
除非可比数据类型之外的任何类型的表达式。返回类型
int 备注
CHECKSUM 对其参数列表计算一个称为校验和的哈希值。此哈希值用于生成哈希索引。
如果 CHECKSUM 的参数为列,并且对计算的 CHECKSUM 值生成索引,则结果是一个哈
希索引。它可用于对列进行等价搜索。CHECKSUM 满足哈希函数的下列属性:在使用等于 (=) 运算符比较时,如果两个列表
的相应元素具有相同类型且相等,则在任何两个表达式列表上应用的 CHECKSUM 将返
回同一值。对于该定义,指定类型的 Null 值被作为相等进行比较。如果表达式列表
中的某个值发生更改,则列表的校验和通常也会更改。但只在极少数情况下,校验和
会保持不变。因此,我们不推荐使用 CHECKSUM 来检测值是否更改,除非应用程序可
以容忍偶尔丢失更改。请考虑改用 HashBytes。指定 MD5 哈希算法时,HashBytes
为两个不同输入返回相同结果的可能性比 CHECKSUM 小得多。表达式的顺序影响 CHECKSUM 的结果值。用于 CHECKSUM(*) 的列顺序是表或视图定义
中指定的列顺序。其中包括计算列。
示例
以下示例演示如何使用 CHECKSUM 生成哈希索引。通过将计算校验和列添加到索引的表中
,然后对校验和列生成索引来生成哈希索引。 复制代码
-- Create a checksum index.
SET ARITHABORT ON;
USE AdventureWorks;
GO
ALTER TABLE Production.Product
ADD cs_Pname AS CHECKSUM(Name);
GO
CREATE INDEX Pname_index ON Production.Product (cs_Pname);
GO
校验和索引可用作哈希索引,尤其是当要索引的列为较长的字符列时可以提
高索引速度。校验和索引可用于等价搜索。
/*Use the index in a SELECT query. Add a second search
condition to catch stray cases where checksums match,
but the values are not the same.*/
SELECT *
FROM Production.Product
WHERE CHECKSUM(N'Bearing Ball') = cs_Pname
AND Name = N'Bearing Ball';
GO
对计算列创建索引将具体化为校验和列,对 ProductName 值所做的任何更改都将传播到校验和列。
也可以直接对索引的列生成索引。然而,如果键值较长,则很可能不执行校验和索引甚至常规索引。
msdn我也会查的,我看了msdn才发了这两个问题
checksum的典型性用法可以替代文本检索。比如为文本字段添加一个对应的checksum计算列,然后筛选时,使用
where 计算列=checksum('文本') 方式进行检索。可以提高检索文本的效率。至于俩个不同的值完全有可能会生成相同的值。毕竟checksum是校验和值
select checksum('a-b')
-- have the same result 151912974