SQL Server中的校验和示例说明(T-SQL)

时间:2017-08-02 18:48:21

标签: sql-server tsql

任何人都可以解释一下以下查询的含义吗?

我不理解某些链接中的校验和。这让我感到困惑。

SELECT COUNT(DISTINCT CHECKSUM(StudentID, RegistrationDate)) 
FROM RegistrationSummary

谢谢大家。

2 个答案:

答案 0 :(得分:1)

Checksum根据给定的列计算整数哈希码。它通常用于检查两个不同的表中是否存在相同的值,而不必逐个单独比较每个列。

因此,您提供的查询是计算表中具有[StudentID]和[RegistrationDate]的区别值的行数。该函数是否等效于:

 SELECT Count(*) FROM
 (
    SELECT DISTINCT StudentID, RegistrationDate
      FROM RegistrationSummary
 )

请注意,两个完全不同的值集总是可能最终具有完全相同的哈希码,因此这不是一个完美的技术。但考虑到校验和的创建方式,这是不太可能的,所以当一个十亿分之一左右的错误计数可以接受时,它是比较数据的合理防御方法。

答案 1 :(得分:0)

在这种情况下,它只是允许连接2个不同的数据类型,以检查2列中的唯一性。

您可以轻松地将其重写为......

SELECT COUNT(DISTINCT CONCAT(StudentID, RegistrationDate)) 
FROM RegistrationSummary;