Problemas con el CHECKSUM

15/10/2003 - 21:17 por Matias Schapiro | Informe spam
Hola, estoy teniendo el siguiente problema. Utilizo la funcion CHECKSUM para
saber si un registro fue modificado o no. Tenia entendido que para dos
entradas diferentes, el resultado era siempre distinto, sin embargo me
encontre con un caso en que no es asi:

SELECT checksum('2003','2003','200310','200310','20031008','20031007')
SELECT checksum('2003','2003','200309','200309','20030908','20030907')

Alguien tiene alguna idea de por que puede estar sucediendo esto?
Gracias
Matias
 

Leer las respuestas

#1 Eladio Rincón
15/10/2003 - 22:43 | Informe spam
Hola,

de los BOL:
"BINARY_CHECKSUM y CHECKSUM son funciones parecidas: pueden utilizarse para calcular un valor de suma de comprobación en una lista de expresiones; el orden de las expresiones afecta al valor del resultado. El orden de las columnas utilizadas en el caso de CHECKSUM(*) es el orden de las columnas especificado en la definición de la tabla o la vista, incluidas las columnas calculadas. "

Checksum se utiliza para generar un valor calculado en función a la lista de argumentos; lo bueno de los índices hash es que son pequeños y muy útiles cuando tengas la necesidad de indexar columnas de un tamaño grande; si te fijas en el ejemplo de BOL:

SELECT *
FROM Products
WHERE checksum(N'Vegie-spread') = cs_Pname
AND ProductName = N'Vegie-spread'

se realizan dos comparaciones; la primera la del indice hash, y la segunda la de la columna buscada; de esta forma, primero se filtra la muestra por el índice hash, y de los coincidentes (como puede haber un mismo checksum para distintos valores), se filtra el producto.



Eladio Rincón
SQL Server MVP
http://eladio.europe.webmatrixhosting.net



"Comparte lo que sabes, aprende lo que no sepas." FGG

"Matias Schapiro" escribió en el mensaje news:
Hola, estoy teniendo el siguiente problema. Utilizo la funcion CHECKSUM para
saber si un registro fue modificado o no. Tenia entendido que para dos
entradas diferentes, el resultado era siempre distinto, sin embargo me
encontre con un caso en que no es asi:

SELECT checksum('2003','2003','200310','200310','20031008','20031007')
SELECT checksum('2003','2003','200309','200309','20030908','20030907')

Alguien tiene alguna idea de por que puede estar sucediendo esto?
Gracias
Matias


Preguntas similares