BlogoDev

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.

:, ,
Posts Relacionados

2 Comments for this entry

Leave a Reply

Paginas

 

April 2009
M T W T F S S
« Mar   May »
 12345
6789101112
13141516171819
20212223242526
27282930