您的位置:首页 > 数据库

sql server:向表中批量插入记录时如何避免重复插入记录

2010-01-13 14:48 232 查看
1:sql server定时执行存储过程或一段SQL代码

选 sqlserver 服务器,选管理 选sql server 代理 选作业. 定制作业

2:表A和表B有完全相同的结构,将表A中的数据插入表B中,表B中与表A中相同的记录不重复插入

insert into 表B select * from 表A where checksum(*) not in (select checksum(*) from 表B)

原理

CHECKSUM (Transact-SQL)

返回按照表的某一行或一组表达式计算出来的校验和值。CHECKSUM 用于生成哈希索引。


Transact-SQL 语法约定


语法

CHECKSUM ( * | expression [ ,...n ] )



参数

*

指定对表的所有列进行计算。如果有任一列是非可比数据类型,则 CHECKSUM 返回错误。非可比数据类型有 textntextimage、XML 和 cursor,还包括以上述任一类型作为基类型的 sql_variant

expression

除非可比数据类型之外的任何类型的表达式


返回类型

int


注释

CHECKSUM 对其参数列表计算一个称为校验和的哈希值。此哈希值用于生成哈希索引。如果 CHECKSUM 的参数为列,并且对计算的 CHECKSUM 值生成索引,则结果是一个哈希索引。它可用于对列进行等价搜索。

CHECKSUM 满足哈希函数的下列属性:在使用等于 (=) 运算符比较时,如果两个列表的相应元素具有相同类型且相等,则在任何两个表达式列表上应用的 CHECKSUM 将返回同一值。对于该定义,指定类型的 Null 值被作为相等进行比较。如果表达式列表中的某个值发生更改,则列表的校验和通常也会更改。但只在极少数情况下,校验和会保持不变。因此,我们不推荐使用 CHECKSUM 来检测值是否更改,除非应用程序可以容忍偶尔丢失更改。请考虑改用 HashBytes。指定 MD5 哈希算法时,HashBytes 为两个不同输入返回相同结果的可能性比 CHECKSUM 小得多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: