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

Paso Parametros string procedimiento almacenado

Estas en el tema de Paso Parametros string procedimiento almacenado en el foro de SQL Server en Foros del Web. Hola amigos, tengo una consulta relacionada con procedimientos almacenados Necesito realizar una función que reconozca un conjunto de strings, que de hecho ya funciona, pero ...
  #1 (permalink)  
Antiguo 19/05/2011, 14:26
 
Fecha de Ingreso: enero-2011
Ubicación: Santiago
Mensajes: 12
Antigüedad: 13 años, 3 meses
Puntos: 0
Paso Parametros string procedimiento almacenado

Hola amigos, tengo una consulta relacionada con procedimientos almacenados
Necesito realizar una función que reconozca un conjunto de strings, que de hecho ya funciona, pero no logro pasarle los parámetros correctamente. La consulta pertenece a un cursor es algo así como la que sigue
Código SQL:
Ver original
  1. SELECT DISTINCT res.id, res.perfil
  2. FROM dbo.TBL_1 res,
  3.     dbo.TBL_2 cam,
  4.     dbo.TBL_3 een
  5. WHERE res.PK_CAM_ID = cam.PK_ID AND
  6.     cam.CAM_COD IN ('asdf1','asdf2','asdf3','asdf4')

en mi procedimiento almacenado intento reemplazar el listado de variables por @parametros y quedaría así

Código SQL:
Ver original
  1. SELECT DISTINCT res.id, res.perfil
  2. FROM dbo.TBL_1 res,
  3.     dbo.TBL_2 cam,
  4.     dbo.TBL_3 een
  5. WHERE res.PK_CAM_ID = cam.PK_ID AND
  6.     cam.CAM_COD IN (@parametros)

pero como lo recibe como un string, lo envía así
Código SQL:
Ver original
  1. @parametros = '''asdf1'',''asdf2'',''asdf3'',''asdf4'''

y finalmente no reconoce los campos uno por uno, como un varchar separado por una coma. Intenté Pasar los parámetros de esta forma
Código SQL:
Ver original
  1. SELECT *
  2. FROM dbo.SplitDelimited(@parametros,',')
pero me arroja un error. ..... Y bueno ¿Alguien conoce la solución para este problema? Agradezco de antemano la colaboración que pudiesen aportar
  #2 (permalink)  
Antiguo 19/05/2011, 14:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Paso Parametros string procedimiento almacenado

Prueba creando esta funcion:

Código SQL:
Ver original
  1. ALTER FUNCTION [dbo].[SplitApplication](@applicationid VARCHAR(2000))
  2.  
  3. RETURNS @RtnValue TABLE
  4. (
  5. Id INT IDENTITY(1,1),
  6. DATA nvarchar(100)
  7. )
  8. AS
  9. BEGIN
  10. DECLARE @Cnt INT, @SplitOn nvarchar(5)
  11. SET @SplitOn = ','
  12. SET @Cnt = 1
  13.  
  14. While (Charindex(@SplitOn,@applicationid)>0)
  15. BEGIN
  16. INSERT INTO @RtnValue (DATA)
  17. SELECT
  18. DATA = ltrim(rtrim(SUBSTRING(@applicationid,1,Charindex(@SplitOn,@applicationid)-1)))
  19.  
  20. SET @applicationid = SUBSTRING(@applicationid,Charindex(@SplitOn,@applicationid)+1,len(@applicationid))
  21. SET @Cnt = @Cnt + 1
  22. END
  23.  
  24. INSERT INTO @RtnValue (DATA)
  25. SELECT DATA = ltrim(rtrim(@applicationid))
  26.  
  27. RETURN
  28. END
  29.  
  30. GO
  31.  
  32.  
  33. how TO USE :
  34.  
  35. SELECT * FROM TABLE WHERE DATA IN (SELECT DATA FROM SplitApplication(@application))

Lo que hace es que le mandas una cadena separada por comas y la acomoda para que puedas usarla en un "IN"

Saludos!!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 19/05/2011, 16:31
 
Fecha de Ingreso: enero-2011
Ubicación: Santiago
Mensajes: 12
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Paso Parametros string procedimiento almacenado

Muchas gracias Libras por tu respuesta, lo malo es que no puedo usar esa solución, ya que en la base de datos que uso, hay muchas restricciones no negociables, entre ellas la creación de tablas temporales. No sé el porque de esta restricción, y bueno, no me quieren dar permiso para crear temporales.

Si alguien tiene otra idea o solución le estaré muy agradecido
  #4 (permalink)  
Antiguo 20/05/2011, 07:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Paso Parametros string procedimiento almacenado

Si probaste creando la funcion?? porque se me hace raro que no tengas los permisos para crear temporales ni siquiera en una funcion de retorno de tabla...

La otra es que lo hagas con un query dinamico algo asi:

Código SQL:
Ver original
  1. DECLARE @query VARCHAR(MAX)
  2.  
  3. SET @query='SELECT DISTINCT res.id, res.perfil
  4. FROM dbo.TBL_1 res,
  5.    dbo.TBL_2 cam,
  6.    dbo.TBL_3 een
  7. WHERE res.PK_CAM_ID = cam.PK_ID AND
  8.    cam.CAM_COD IN ( ' + @parametros + ' )'
  9. EXEC Sp_sqlExec @query


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 08/06/2011, 10:10
 
Fecha de Ingreso: enero-2011
Ubicación: Santiago
Mensajes: 12
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Paso Parametros string procedimiento almacenado

Perfecto, muchas gracias Libras, esa solución me viene mucho mejor

Etiquetas: parametros, procedimiento
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 21:36.