21 febrero 2009

COALESCE (Transact-SQL)

Hace poco estaba buscando la manera de que una query de selección SQL restringida por 4 parámetros unidos a su vez por AND, devuelva resultados a pesar de enviarle menos de los parámetros necesarios. Para explicar mejor mi punto, el código SQL era muy similar al siguiente:
DECLARE @param1 VARCHAR(25)
DECLARE @param2 VARCHAR(25)
SET @param1 = NULL
SET @param2 = NULL
SELECT id, nombre, grado, area FROM empleados
WHERE grado = @param1 AND area = @param2;
Lo anterior indica que si las dos expresiones después de la clausula WHERE son TRUE entonces se regresan resultados. ¿ Pero que sucede si solo mando un parámetro y yo deseo que busque por ese único parámetro ?, es ahí donde entra la función COALESCE. Básicamente evalúa una serie de expresiones y devuelve la primera expresión diferente de NULL, en cristiano: "El primer parámetro que lleve algún valor es el que se toma en cuenta". Ahora usaré el código anterior aplicando la función COALESCE:
DECLARE @param1 VARCHAR(25)
DECLARE @param2 VARCHAR(25)
SET @param1 = NULL
SET @param2 = NULL
SELECT id, nombre, grado, area FROM empleados
WHERE grado = COALESCE(@param1,grado) AND
area = COALESCE(@param2,area);
El cambio en el código fue usar la función donde se comparan las columnas empleados y area con @param1 y @param2 respectivamente. Al hacer esto, si por ejemplo @param1 no lleva valor entonces se regresará grado, que en este caso es una columna. Comparar la columna por si misma ayuda a que esa comparación devuelva un TRUE para todos los resultados posibles y así discriminar la búsqueda solo por el criterio restante (@param2).
Usar COALESCE es como usar un SWITCH que por defecto regresa un valor NULL. Para más detalle sobre la función dejo éstas ligas: COALESCE en Wikipedia y Microsoft Technet

1 comentario: