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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Maxi
09/06/2004 - 14:25 | Informe spam
Ruben , quiero decirte que tu metodo es muy bueno de verdad y es mucho mas
recomendado que el uso de SqlDinamico :-)

Ademas al utilizar Xml es mucho mas escalable

Bye


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Rubén Vigón" escribió en el mensaje
news:
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




Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.698 / Virus Database: 455 - Release Date: 02/06/2004
Respuesta Responder a este mensaje
#3 JMT
10/06/2004 - 09:27 | Informe spam
Muchas gracias por la respuesta
Saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida