miércoles, 27 de enero de 2010

Case Sensitive en SQL Server

Hoy vuelvo de nuevo a Bloggear y quiero retomar el camino volviendo a los inicios de lo que yo considero fácil o que puede ayudar a mucho a alguien en sus principio pero bueno manos a la obra o para este caso mejor dicho manos a la base.

-- Declaramos variables
DECLARE
@fcVariableUno VARCHAR(20),
@fcVariableDos VARCHAR(20)
-- Asignacion de Variables
SET @fcVariableUno = 'LUIS'
SET @fcVariableDos = 'luis'

-- Comparacion de variables
IF @fcVariableUno = @fcVariableDos
BEGIN
SELECT @fcVariableUno + ' y ' + @fcVariableDos + ' ¿Son iguales...?'
END
ELSE
BEGIN
SELECT @fcVariableUno + ' y ' + @fcVariableDos + ' ahora si son diferentes'
END

------------------------------------------------------------


LUIS y luis ¿Son iguales...?


Como pudimos ver la consulta no distingue entre mayúsculas y minúsculas. Esto es bastante practico en muchos casos, pero para algunas situaciones que requerimos diferenciarlas, como puede ser el caso de validar el login de un usuario, podríamos aplicar la siguiente solución.




-- Volvemos a comparar las variables
IF CAST(@fcVariableUno AS BINARY) = CAST(@fcVariableDos AS BINARY)
BEGIN
SELECT @fcVariableUno + ' y ' + @fcVariableDos + ' ¿Son iguales...?'
END
ELSE
BEGIN
SELECT @fcVariableUno + ' y ' + @fcVariableDos + ' ahora si son diferentes'
END

-------------------------------------------------------------------


LUIS y luis ahora si son diferentes


¿Por que paso esto? la respuesta es facil todas las letras tienen un valor binario ya sea mayuscula o minuscula estas tiene diferentes valores por lo cual asi es facil distinguir una de otra pero veamos un ejemplo sencillo.

SELECT 'b',CAST('b' AS BINARY)


SELECT 'B',CAST('B' AS BINARY)



---- --------------------------------------------------------------

b 0x620000000000000000000000000000000000000000000000000000000000


---- --------------------------------------------------------------


B    0x420000000000000000000000000000000000000000000000000000000000




Como se puede apreciar en el ejemplo aunque las 2 son la misma letra su valor binario varia



Otra forma de hacerlo es modificando el Collation default SQL_Latin1_General_CP1_CI_AS que no diferencia mayúsculas de minúsculas pero de este tema ya hay un buen blog así que mejor les dejo el link y decidan cual es mas conveniente para lo que ocupan.



http://blog.sqlauthority.com/2007/04/30/case-sensitive-sql-query-search/



Bueno ahora ya podemos diferenciar mayúsculas de minúsculas en SQL Server, espero esto les sea de utilidad.



Saludos y felices teclazos