Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用校验和检查行是否已更改(sql server)?_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

是否可以使用校验和检查行是否已更改(sql server)?

是否可以使用校验和检查行是否已更改(sql server)?,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,这里我们可以看到特定行的校验和值 Create table Info ( Personid int, PersonNo int ) insert into Info(Personid,PersonNo) values(3,4) 现在我更新PersonNo的值并检查特定行的校验和 Create table Info ( Personid int, PersonNo int ) insert into Info(Personid,PersonNo) values(3,4) 校验和值已更改 因

这里我们可以看到特定行的校验和值

Create table Info
(
Personid int,
PersonNo int
)

insert into Info(Personid,PersonNo) values(3,4)
现在我更新PersonNo的值并检查特定行的校验和

Create table Info
(
Personid int,
PersonNo int
)

insert into Info(Personid,PersonNo) values(3,4)
校验和值已更改

因此,从这个角度来看,我可以知道特定的行已被更改

所以我的问题是这是安全的还是准确的

校验和满足哈希函数的属性:应用校验和 如果 两个列表的对应元素具有相同的类型,并且 使用等于(=)运算符进行比较时等于。为此 定义中,指定类型的空值被视为比较 平等如果表达式列表中的某个值发生更改,则 列表的校验和通常也会更改。

但请注意

但是,校验和不改变的可能性很小。因此,我们不建议使用校验和来检测 值已更改,除非您的应用程序能够偶尔容忍 缺少一个变化。考虑使用。 当指定MD5哈希算法时,哈希字节的概率 对于两个不同的输入返回相同的结果要比 校验和


这是不安全的,
校验和
可能会为不同的数据生成重复项

在SQL Server中,要检查行是否在这两个时间段之间更改,通常会使用
ROWVERSION
(或其synonim
时间戳
),但必须将其作为列添加到表中。这实际上不是一个时间戳,而只是一个数据库范围的计数器,并为每个更新的行自动维护。注意,当发出UPDATE语句时,它会发生变化,内容实际上可能会保持不变,而不是校验和


或者您可以滚动自己的实时时间戳-添加所需精度的datetime列并手动更新。

使用起来更简单、更好:数据类型。如果您有一个该类型的列,它将针对每个操作进行更新,因此可用于检查自读取该行以来是否发生了更改。