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.
April 23rd, 2009 on 5:28 pm
Excelente, el truco esta en la condición.
Buen aporte gracias.
May 23rd, 2009 on 1:50 pm
I will leave a reply as soon as I try it Thank you