Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

procedimientos almacenados + parametros

Estas en el tema de procedimientos almacenados + parametros en el foro de SQL Server en Foros del Web. hola querria saber como se le mandan los parametros a un procedimiento almacenado cuando este puede traer varios valores por ejemplo en la consulta en ...
  #1 (permalink)  
Antiguo 17/04/2006, 13:52
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 19 años, 8 meses
Puntos: 1
procedimientos almacenados + parametros

hola querria saber como se le mandan los parametros a un procedimiento almacenado cuando este puede traer varios valores por ejemplo en la consulta en cual decimos por ejemplo

where id in (nro1,nro2,...) estos párametros como se los tengo que mandar si la cantidad que me pueden venir es aleatoria

dese ya m,uchas grcias
__________________
Mas vale morir de pie que vivir de rodillas :ojotes:
  #2 (permalink)  
Antiguo 17/04/2006, 15:54
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Una forma podría en la que podría quedar tu SP sería así:

Cita:
CREATE PROCEDURE GetValues
(
@values VARCHAR(100)
)
AS
DECLARE @temp VARCHAR(500)

SET @temp = 'SELECT * FROM table1 '
SET @temp = @temp + ' WHERE ID IN (' + @values + ')'

EXEC (@temp)

GO
Y lo llamas así:

Cita:
GetValues '3,4'
donde 3 y 4 son los ID que le vas a pasar a tu SP

Espero te sirva..

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 18/04/2006, 14:37
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Una variante que te permite no usar código dinámico es convertir los valores a una tabla temporal o en memoria y sobre esa hacer un join con el resto del query.

De esa manera que quitas de los problemas del SQL dinámico. Este es el código que yo manejo, basado de un código de la red (seguramente de sqlservercentral.com) y con adaptaciones mías:
Código:
CREATE FUNCTION dbo.fnStringListToTable (@stringlist ntext)
RETURNS @tbl TABLE (
	row_no		int IDENTITY(1, 1) NOT NULL,
	number_int	int NOT NULL,
	number_decimal	decimal(15,5),
	string		nvarchar(100) NOT NULL
) AS

/*
fnStringListToTable

Regresa una tabla en memoria a partir de la cadena separada por
espacios que se pasa como parametro.
*/

BEGIN
	DECLARE @pos	int,
		@textpos	int,
		@chunklen	smallint,
		@int_val 	int,
		@dec_val	decimal(15,5),
		@str_val	nvarchar(4000),
		@tmpstr		nvarchar(4000),
		@leftover	nvarchar(4000)
	
	SET @textpos = 1
	SET @leftover = ''
	
	WHILE @textpos <= datalength(@stringlist) / 2
	BEGIN
		SET @chunklen = 4000 - datalength(@leftover) / 2
		SET @tmpstr = ltrim(@leftover + substring(@stringlist, @textpos, @chunklen))
		SET @textpos = @textpos + @chunklen
	
		SET @pos = charindex('@', @tmpstr)		--"@" es el separador de cadena
		WHILE @pos > 0
		BEGIN
			SET @str_val = substring(@tmpstr, 1, @pos - 1)
			SET @int_val = CASE WHEN dbo.fnIsNumeric(@str_val) = 1 THEN CONVERT(int, CONVERT(float, @str_val)) ELSE 0 END
			SET @dec_val = CASE WHEN dbo.fnIsNumeric(@str_val) = 1 THEN CONVERT(decimal(15,5), @str_val) ELSE 0 END
			INSERT @tbl (number_int, number_decimal, string) VALUES(@int_val, @dec_val, @str_val)
			SET @tmpstr = ltrim(substring(@tmpstr, @pos + 1, len(@tmpstr)))
			SET @pos = charindex('@', @tmpstr)
		END
	
		SET @leftover = @tmpstr
	END
	
	IF ltrim(rtrim(@leftover)) <> ''
		INSERT @tbl (number_int, number_decimal) VALUES(convert(int, @leftover), convert(decimal(15,5), @leftover))
	
	RETURN

END
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #4 (permalink)  
Antiguo 19/04/2006, 06:46
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 19 años, 8 meses
Puntos: 1
gracias por responder se lo agredezco de corazon, probe la de rootK y anda la de Mithrandir me parace muy avanzada para mis conocimientos del transact y me encantaria saber donde aprendiste a ahcer esas cosas, porque el codigo no entiendo nada pero te lo agradezco un monton

gracias
__________________
Mas vale morir de pie que vivir de rodillas :ojotes:
  #5 (permalink)  
Antiguo 19/04/2006, 16:10
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Pues el código no es mío, yo solo lo he adaptado un poco a mis gustos/necesidades.

Y de como aprender, pues los golpes de la vida. Necesitas algo y lo haces, o buscas de donde "inspirarte" y editandolo se aprende mucho.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #6 (permalink)  
Antiguo 19/03/2009, 10:57
 
Fecha de Ingreso: febrero-2009
Mensajes: 28
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: procedimientos almacenados + parametros

muy buenos codigos gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:18.