BlogoDev

Tag: TSQL

Técnicas – TSQL 2

by P-los on Apr.23, 2009, under Bases de Datos, Técnicas

Previamente les mostraba la forma de simplificar las sentencias SQL cuando deseamos filtrar en base al tipo “Todas” o “Solo Activas”. ¿Que pasa si deseamos dar más opciones? Pongo el siguiente ejemplo para especificar la situación:

Un pedido puede tener uno de los siguientes estados: Recibido, En proceso, Procesado, Enviado, Cancelado.

La forma erronea que me he encontrado implementada en algunos sistemas es la siguiente:
if (@todos = 1)
begin

select campo1, campo2 from pedidos
end
else
begin

select campo1, campo2 from pedidos where estado = @estado
end

Utilizando esta forma, en la interface de usuario es necesario mostrar por ejemplo, un checkbox para mostrar todos, y en caso de que esté desmarcado, habilitar un combo con las opciones de los diferentes estados posibles. Como podrán ver, esto requiere que se tenga un poco de trabajo de más al tener que programar las funciones del checkbox.

Solución:

Vamos a utilizar solamente combo para mostrar las opciones. A este combo hay que añadir la opción “Todos”, dandole un valor diferente al que tengan las demas opciones. Para este ejemplo vamos suponer que los valores de los diferentes estados son numeros enteros, del 1 en adelante, así que a la opción “Todos” le asignaremos el valor “-1″

Al momento de crear nuestra sentencia SQL quedaría de la siguiente manera:

select campo1, campo2 from pedidos where (estado = @estado or @estado = -1)

Así, cuando la variable @estado es -1, sin importar el valor que tenga el campo estado en la tabla, el registro se va a mostrar, y cuando la variable @estado tiene un valor diferente, se mostrarán únicamente los registros donde el valor del campo y el valor del parámetro sean iguales.

De esta manera, en primera instancia reducimos la cantidad de parámetros (antes: @todos y @estado, ahora: @estado) y al momento de hacer alguna modificación en los campos a mostrar, se hará el cambio solo en 1 sentencia, simplificando así la labor de mantenimiento.

2 Comments :, , more...

Técnicas – TSQL 1

by P-los on Apr.20, 2009, under Bases de Datos, Técnicas

Ultimamente me ha tocado hacer revisiones de mantenimiento a un sistema, y me he encontrado en los procedimientos almacenados con algo como lo siguiente:

if (@Todos = 1)
begin

select campo1, campo2 from tabla
end
else
begin

select campo1, campo2 from tabla where activo = 1
end

El principal problema con esta forma, es que al momento de cambiar los campos que se requieren mostrar, es necesario modificar las 2 sentencias para no provocar errores.

Para el presente ejemplo, estaremos asumiendo que:

  1. activo es el campo de la tabla en base al que se filtrará la información
  2. @Todos es el parámetro del procedimiento almacenado que indica de que manera filtrar la información

La forma de corregir esto, haciendo más sencillo el código, es modificar la clausula where de la siguiente manera:

select campo1, campo2 from tabla where (activo = 1 or @Todos = 1)

De esta manera, se obtienen los resultados en base a la siguiente tabla:

activo @Todos Resultado
0 0 No se muestra
0 1 Si se muestra
1 0 Si se muestra
1 1 Si se muestra

Esta tabla es por cada registro de nuestra tabla.

Esta forma de simplificar la estructura de nuestros procedimientos almacenados (o métodos equivalentes) aplica unicamente cuando el campo en base al que se filtra es de tipo binario (o booleano). En un post posterior estaré mostrando la forma que utilizo para simplificar las sentencias cuando el campo mencionado puede tener uno de muchos valores diferentes.

1 Comment :, , more...

Paginas

 

July 2010
M T W T F S S
« Jun    
 1234
567891011
12131415161718
19202122232425
262728293031