Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas

viernes, 19 de octubre de 2007

Sobre los MVP de Microsoft


Un compañero de trabajo se estaba rompiendo la cabeza con una consulta contra SQL Server que ejecutada directamente con el analizador de consultas le tarda 2 segundos y en un Stored Procedure le tarda como 25 segundos.
Pues bien, después de buscar en google un poco ha encontrado esta página: http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx en la que se explica que no se deben utilizar Stored Procedures porque (entre otras cosas) se tarda mucho en picarlos y claro, es más sencillo enviar las consultas directamente. Esto denota una ignorancia y/o perrería impresionante, ya no porque se pasa por el forro el tema de la reutilización de código, sino por que el tipo que lo cuenta es MVP (Microsoft Most Valuable Professional) y MCAD (Microsoft Certified for Application Development).

No entraré en el tema de la dificultad o no de los certificados pero lo que clama al cielo es que alguien que se supone entiende de esto diga semejante sandez acompañada de lo que me ha empujado a escribir esta rajada, "para consultas complicadas mejor utiliza views". Esto me parece que es lo más salvaje que he escuchado desde que le llamaron películas a eso que hizo el Chiquito de la Calzada en dos ocasiones. Las views son la cosa más lenta y poco útil de cuanto se puede hacer en una base de datos, y cualquier libro un poco serio al respecto recomendará limitar muchísimo el uso de view, por no decir que la recomendación es no usarlas.


En fin que hoy día cualquiera se saca una certificación y suelta esas burradas y como alguien que esté empezando lo lea se le creerá y todo!

martes, 18 de septiembre de 2007

Arrays por parámetro a un Stored Procedure de SQL Server

Debido a un mantenimiento que estaba realizando necesitaba enviar un array con fechas a un procedimiento almacenado de SQL Server. Esto es mucho más rápido que realizar una llamada al procedimiento para cada elemento.

Ahí va el ejemplo:

Estructura XML (faltan los simbolos de mayor y menor porque el sistema los interpreta y no los muestra):

SolicitudVacaciones
dia valor = "Fecha1" /
dia valor = "Fecha2" /
dia valor = "Fechan" /
/SolicitudVacaciones

CREATE PROCEDURE spUtilizarArrayXML
@sFechasXML AS VARCHAR(8000)
AS
DECLARE @idoc INT
-- Creamos la tabla temporal que tendrá los datos de la estructura XML
CREATE TABLE #DiasSolicitados (DiaSolicitado VARCHAR(10))

-- Este procedimiento almacenado carga en memoria la estructura XML y guarda una referencia en @idoc
EXEC sp_xml_preparedocument @idoc OUTPUT, @sFechasXML

-- Insertamos los datos en la tabla temporal
INSERT INTO #DiasSolicitados Select * FROM OpenXml(@idoc,'SolicitudVacaciones/dia', 1)
WITH (valor VARCHAR(10))

-- Aquí iría el código utilzando los valores recien insertados en la tabla temporal

-- Finalmente se libera de la memoria el documento XML y la tabla temporal
exec sp_xml_removedocument @idoc output
DROP TABLE #DiasSolicitados