pouvons-nous utiliser la sum de contrôle pour vérifier que cette ligne a été modifiée (server sql)?

Create table Info ( Personid int, PersonNo int ) insert into Info(Personid,PersonNo) values(3,4) 

Ici, nous pouvons voir la valeur de la sum de contrôle de la ligne particulière

 Select CHECKSUM(Personid ,PersonNo ) from Info 

Maintenant, je mets à jour la valeur de PersonNo et vérifie la sum de contrôle de la rangée en question

La valeur CheckSum a été modifiée

donc sur ce nom je peux savoir que cette ligne a été modifiée

alors ma question est: Est-ce que c'est sûr ou exact?

De CHECKSUM (Transact-SQL)

CHECKSUM vérifie les propriétés d'une fonction de hachage: CHECKSUM appliqué sur deux lists d'expressions quelconques renvoie la même valeur si les éléments correspondants des deux lists ont le même type et sont égaux lorsqu'ils sont comparés en utilisant l'opérateur égal (=). Pour cette définition, les valeurs nulles d'un type spécifié sont considérées comme équivalentes. Si l'une des valeurs de la list d'expressions change, la sum de contrôle de la list change également généralement.

Notez bien que

Cependant, il y a une petite chance que la sum de contrôle ne change pas. Pour cette raison, nous ne recommandons pas d'utiliser CHECKSUM pour détecter si les valeurs ont changé, à less que votre application ne puisse tolérer occasionnellement l'absence d'une modification. Pensez à utiliser HashBytes à la place. Lorsqu'un algorithm de hachage MD5 est spécifié, la probabilité que HashBytes renvoie le même résultat pour deux inputs différentes est beaucoup plus faible que celle de CHECKSUM.

Ce n'est pas sûr, CHECKSUM pourrait produire des duplicates pour différentes données.

Dans SQL Server, pour vérifier si la ligne a été modifiée entre-time, ROWVERSION (ou synonim TIMESTAMP ) est généralement utilisé, mais vous devez l'append en tant que colonne à une table. Ce n'est pas vraiment un horodatage mais plutôt simplement un countur à l'échelle de la database et il est maintenu automatiquement pour chaque ligne mise à jour. Notez que cela changera quand une instruction UPDATE est émise, le contenu peut en fait restr le même, par opposition à la sum de contrôle.

Ou vous pouvez lancer votre propre horodatage réel – ajoutez une colonne datetime de précision requirejse et mettez-la à jour manuellement.