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

Preguntas similare

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


Respuesta Responder a este mensaje
#2 Mauricio Sthandier R.
16/10/2003 - 00:19 | Informe spam
CHECKSUM no garantiza que el valor sea único dentro de una tabla, ya que dos
registros o campos pueden "pesar" lo mismo. Ejecuta esta sentencia :

SELECT CHECKSUM(106), CHECKSUM('D'), CHECKSUM('d'), CHECKSUM(1, 122)

BINARY_CHECKSUM resultaría más preciso en el caso anterior, pero sigue sin
garantizar la exclusividad.
Por eso se incluyen condiciones de filtrado adicionales, para aquellos raros
casos en que haya más de un mismo CHECKSUM para la lista. Pero el filtrado
preliminar ya se efectuó y seguramente fue muy rápido.


"...
sure you swear you are able to
lift from the unwilling patience
and heal gently the wounded and therefore annoying heart
kissing goodbye its pride
so quiet she would not ever decide ?"
"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


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida