miércoles, 29 de mayo de 2013

SQL Server: La importancia de elegir la instrucción correcta

Diferentes instrucciones de  SQL Server que aparentemente tienen el mismo resultado en realidad muestran diferentes resultados incluso pueden generar errores. Lo veremos más claro con un ejemplo.

Enunciado  del ejemplo:
Dado un campo1 de tipo smallint, se desea que tome valor 1 para todos los valores del campo2 de tipo varchar que comiencen por 2 excepto para los que comiencen por 23 que tomará valor cero. el resto de ocurrencias es indiferente.

--estas dos select devuelven el mismo resultado
SELECT * FROM tabla WHERE substring(campo2,1,1) = 2
SELECT * FROM tabla WHERE campo2 like '2%'

Estas dos líneas de instrucciones realizan la operación solicitada. 
--Esta solución es correcta, pero si el campo varchar contiene letras dará un error de conversión de tipos.
UPDATE tabla SET campo1 = 1 WHERE substring(campo2,1,1) = 2
UPDATE tabla SET campo1 = 0 WHERE substring(campo2,1,2) = 23

Estas dos líneas de abajo realizan el mismo trabajo que las anteriores pero son más robustas frente a fallos.
--Esta solución es más correcta pues hace lo mismo que la anterior y aunque el campo varchar contenga letras, no falla.
UPDATE tabla SET campo1 = 1 WHERE campo2 like '2%'
UPDATE tabla SET campo1 = 0 WHERE campo2 like '23%'

Esto pone de manifiesto que a la hora de hacer una instrucción de SQL no sólo basta con que sea correcta, hay que tener en cuenta los posibles fallos, en este caso de conversión de tipos de un campo varchar que toma valores numéricos (pero puede que no lo haga) pues al ser varchar es legal que un campo venga como 'C2000' y en ese caso el primer UPDATE falla.

No hay comentarios:

Publicar un comentario