Utilizar Lista de Parámetros en Stored Procedure


Tal vez se encuentren en la situación, donde deban pasarle una lista variable de parámetros a un sp. Por ejemplo, supongamos que se seleccionan los id de cliente 1,27,345,73 y deben pasarse a un sp que debe consultar los datos de los id de cliente seleccionados.

Tenemos varias soluciones posibles, inclusive, en SQL Server 2008 es posible solucionarlo utilizando un xml pasado por parámetro, pero vamos a aproximar una solución mas general, que nos sirva para diferentes motores.

Lo que hacemos es crear una función, a la que le pasamos la lista de ids separada por comas, y nos devolverá los id en una tabla que utilizaremos para filtrar los ids en la consulta de clientes.

La función:

CREATE FUNCTION intlist_to_tbl
(@list nvarchar(MAX))
RETURNS @tbl TABLE (number int NOT NULL) 
AS
BEGIN
   DECLARE @pos        int,
           @nextpos    int,
           @valuelen   int

   SELECT @pos = 0, @nextpos = 1

   WHILE @nextpos > 0
   BEGIN
      SELECT @nextpos = charindex(',', @list, @pos + 1)
      SELECT @valuelen = CASE WHEN @nextpos > 0
                              THEN @nextpos
                              ELSE len(@list) + 1
                         END - @pos - 1
      INSERT @tbl (number)
         VALUES (convert(int, substring(@list, @pos + 1, @valuelen)))
      SELECT @pos = @nextpos
   END
   RETURN
END

El procedimiento:

CREATE PROCEDURE consultarListaClientes 
@ids varchar(50) 
AS
   SELECT id, razonsocial
   FROM   clientes 
   inner join intlist_to_tbl(@ids) i ON clientes.id = i.number

La llamada:

EXEC consultarListaClientes '1, 27, 345, 73'

Vale aclarar que esta solución no es la mas rápida, en terminos de velocidad, si la cantidad de ids a consultar es muy grande, será lenta, pero nos servirá para resolver muchas situaciones simples.

Anuncios

Acerca de hvivani

sysadmin, developer, RHCSA
Esta entrada fue publicada en Uncategorized y etiquetada , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s