Pasar un rango como parámetro en un SP

09/06/2004 - 10:48 por JMT | Informe spam
Hola amigos,

Tengo un problema y es que necesito pasar un rango como parámetro en un
Procedimiento almacenado, es decir yo tengo la siguiente instrucción;

UPDATE Stocks SET Stocks.Fecha = Getdate(), Stocks.Unidades Articulos.Stock_Actual
FROM Articulos INNER JOIN Stocks ON Articulos.Codigo = Stocks.Referencia
WHERE Articulos.Tipo in (1, 2, 5, 8, 9)

y quiero pasar los números entre paréntesis como un parámetro, estos números
siempre van a cambiar, es decir en este ejemplo existe una serie de 5
números, pero luego este serie puede contener más o menos números
dependiendo de ciertas condiciones. ¿cómo lo hago?

Muchas gracias
 

Leer las respuestas

#1 Rubén Vigón
09/06/2004 - 11:03 | Informe spam
Aunque es posible utilizar SQL dinámico («sp_executesql») personalmente prefiero utilizar XML (que genero en mi aplicación de Visual Basic y paso como parámetro al procedimiento almacenado) y «OpenXML»; por ejemplo:

DECLARE @doc int, @texto_xml varchar(200)
SET @texto_xml = '<ids><id Tipo="1"/><id Tipo="5"/><id Tipo="8"/></ids>'
EXEC sp_xml_preparedocument @doc output, @texto_xml
UPDATE Stocks SET Stocks.Fecha = Getdate(), Stocks.Unidades = Articulos.Stock_Actual FROM Articulos INNER JOIN Stocks ON Articulos.Codigo = Stocks.Referencia WHERE Articulos.Tipo in (SELECT Tipo FROM OpenXML(@doc, 'ids/id') WITH (Tipo int))
EXEC sp_xml_removedocument @doc

Tal vez el rendimiento sea un poco inferior por el "parseo" XML pero, personalmente, me parece un método mucho más cómodo

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon

Preguntas similares