none
Ayuda con Reporting server y Store Procedure RRS feed

  • Pregunta

  • Hola a todos !!

     

    Espero me puedan ayudar ocn esto:

     

    Estoy haciendo unos reportes con sql 2005, para uno de ellos utilizo un sp con 4 parametros uno para una clave (int), otro con nombres (String) y fechas inicial y final (datetime). Los dos primeros son multivalor ya que necesito que el usuario seleccione uno o varios. Mi problema viene con el primer parametro que es int, al momento de elegir varios me marca un error, que no puede convertir de varchar a int o algo similar...

    Este mismo reporte con esos mismos parametros sirve perfectamente si solo selecciono un solo valor en el primero.

    De igual manera funciona si en lugar de sp yo hago saco la consulta del sp y la pongo de tipo text en el dataset, y aqui si agarro varios valores para el primer parametro.

    Supongo que el error es por que mi parametro es int y al tomar varios valores lo toma de esta manera 1,2,3, y el error que me marca es por las comas.

    Gracias!!!

    • Cambiado Gustavo Larriera miércoles, 25 de noviembre de 2009 15:03 . (De:SQL Server)
    lunes, 28 de abril de 2008 17:57

Todas las respuestas

  • Hola que tal, de hecho el problema radica en las comas, ya que Reporting Services no es muy dinámico que digamos y sobre todo en los parámetros, aqui lo que te aconsejo es si el sp que esta utilizando solo te va servir para este reporte y además los valores de la busqueda son estáticos, agregale un valor determinado a cada selección, es decir, cuando declaras los parámetros en la sección de Available values, es el primer renglón pon por así decir, en Lable 1 y value 1, luego Label 1,2,3 y value 2, despues Label 3,4,5 y value 3.

     

    Y en el sp ya vas a saber que si recibe un 1 tiene que ejecutar el 1 y si recibe el 2 tiene que ejecutar el 1, 2 y 3.

     

    Espero que te haya ayudado en algo, saludos.

    lunes, 28 de abril de 2008 19:31
  • Gracias por la respuesta pero el sp lo utilizo tmb en una aplicación, además los valores son dinámicos, además de que mi catalogo de donde jalo las claves tiene alrededor de 70 campos, por lo tanto tendría que generar demasiadas combinaciones.

     

    Podría poner el sp de tipo text, pero mi query es demasiado grande y no cabe, es por eso que lo hago con sp, pero no me funciona cuando elijo varios valores en el primer parametro....

     

    Saludos!

     

     

     

     

     

    lunes, 28 de abril de 2008 20:48
  • Puedes utilizar un sólo parámetro para el informe y pasarle los valores creados por tí dinámicamente a ese parámetro, donde incluiría el procedimiento y sus valores. Eso sí, al hacer esto, ya tienes que controlar este tú por código.

     

    Un Saludo

    martes, 29 de abril de 2008 13:30
    Moderador
  • Hola de nuevo,

     

    También puedes utilizar la función CInt() para pasar el valor a int.

     

    Un Saludo

    martes, 29 de abril de 2008 14:17
    Moderador
  •  

    Hola!!!

     

    Ya he intentado el Cint y no funciona, incluso intente hacer un cast o un convert desde el sp al momento de recibir los parametros pero tampoco me funciona.

     

    Puedes utilizar un sólo parámetro para el informe y pasarle los valores creados por tí dinámicamente a ese parámetro, donde incluiría el procedimiento y sus valores. Eso sí, al hacer esto, ya tienes que controlar este tú por código.

     

    Con respecto a este mensaje... realmente no entendi muy bien a que te refieres....

     

    Gracias!!

    martes, 29 de abril de 2008 14:37
  • Hola de nuevo, tambien podrias utilizar SUBSTRING, creo que asi se llama, que te perdite ir seleccionando regiones de una cadena de caracteres, aunque creo que si necesitas sabes en que lugares estan las comas para realizar dichas divisiones, pero bueno por aqui debe de estar la respuesta.

     

    SAludos.

    miércoles, 30 de abril de 2008 16:47
  • Creo que se a lo que te refieres, intente hacer algo así... El valor que yo obtengo al seleccionar dos o más valores e: 1,2,3,4...etc, intente ponerle comillas a todos y dejarlo así: '1','2','3','4','5'... pero tampoco funciona... La vdd no se como resolverlo y me parece extraño que al hacerlo como un query normal me acepte varios parametros y no me marque ningún error, pero cuando convierto el query a sp me marque error al convertir un valor char a int.

     


     

     

    miércoles, 30 de abril de 2008 20:39
  •  

    intenta declarando ese int como string en el reporte y en el sp recivirlo tambien como char o nvarchar, y ya al hacer el insert o update hacer el conver dentro de la query.
    miércoles, 7 de mayo de 2008 17:17
  •  

    Es un select loq ue hago, y ya lo declare como varhar en el reporte, en el sp y nada... me marca el mismo error...

     

    Suponiendo que mi sp sea asi:

     

     

    create procedure storep @clave as varchar(10)

    as

    select * from sucursal where clave_sucursal  in (@clave )

     

    He intentado:

    declare @clave as varchar(10)

    set @clave='1'+','+'2'

    set @clave='1,2'

    set @clave='''1'''+','+''2''

     

    exec storep @clave

     

    Y no funciona

     

    tmb he intentado hacer un cast a la consulta:

     

    select * from sucursal where cast(clave_sucursal  as varchar) in (@clave )

     

    y así:

     

    select * from sucursal where cast(clave_sucursal  as varchar) in (cast(@clave  as varchar))

     

    Y no funciona...

     

    Ya no se que más hacer...

     

    miércoles, 7 de mayo de 2008 17:27
  •  

    con respecto a esto:

     

    He intentado:

    declare @clave as varchar(10)

    set @clave='1'+','+'2'

    set @clave='1,2'

    set @clave='''1'''+','+''2''

     

    segun se los parametros de sql los pasa con el siguiente formato:

    '1','2','3',.....'n' que es diferente a como los has usado en el ejemplo que me mandas

     

    ahora si no es eso... a mi me paso algo muy parecido a ti...solo que con fechas.. y la solucion fue.. quitar ese parametro y volverlo a declarar desde cero... y magia... funciono.

    y ya solo hacia el select * from tabla where convert(nvarchar, fecha, formatodefecha ) in (@Fecha)

    en tu caso  select * from sucursal where convert(int clave_sucursal) in (@clave).

     

    miércoles, 7 de mayo de 2008 18:05
  • Si los pasa con el formato '1','2'... 'n', pero si te das cuenta si haces un print (@clave) con el último: set @clave='''1'''+','+''2'', lo imprime justamente asì: '1','2'... y si le pongo set @calve='1','2'... me marca un error.

    Ya elimine y volvi a crear mi parametro... ya utlice el convert y nada... Y es más el segundo parametro que utilizo en la consulta que es un varchar, el cual por cierto no me daba problemas , ahora si, cuando selecciono varios valores no me marca error como en el valor int, pero no me da nada de resultados...

     

     

    Realmente ya no se que hacer!!!

    miércoles, 7 de mayo de 2008 18:16
  • manda el error para ver que mas podria ser.

    miércoles, 7 de mayo de 2008 18:29
  •  

    Mira el error que me manda es este:

     

     

    "Se ha producido un error durante el procesamineto local de informes.

    Error al procesar el informe.

    No se puede leer la siguiente fila de datos del conjunto de datos sp_consumo.

    Error de conversión al convertir el valor varchar '1,3,4,5,6' al tipo de datos int"

     

    Eso cuando elijo varios valores para el primer parametro que es int.

     

    Cuando elijo solo uno no tengo problemas y el reporte lo saca bien.

     

    Gracias!!!

    miércoles, 7 de mayo de 2008 18:49
  • Hola como esta?, antes que nada dejame preguntarte algo clave_sucursal de que tipo es? Es de tipo int, double, char, varchar, nvarchar? Porque podria ser que el problema radique ahí.

     

    si es de tipo numerico:

     

    declare @clave as varchar(10)

    set @clave='1'+','+'2'

     

    @clave deberia de tener algo asi 1,2,3

     

    select * from sucursal where clave_sucursal in (@clave )

     

    Ahora bien si es de tipo caracter estamos en problemas, porque si se hace de la siguiente forma,

     

    declare @clave as varchar(10)

    set @clave='1'+','+'2'

     

    el resultado para la consulta es '1,2' en lugar de '1','2'

     

    solo hay que buscar una forma de como concatenar la ' dentro del varchar

     

    Saludos, espero que haya funcionado.

    miércoles, 7 de mayo de 2008 19:09
  • Es tipo de datos int, y ya he utilizado set @clave=1,2... pero marca error, de todas formas si lo declaro como string, y lo hago

     

    set @clave='''1'''+','+'''2'''

     

    Me lo toma '1','2'.... y aun asi no funciona... ni como int, ni como varchar....

     

    Pero de todas formas, cuando los valores los parametros en el reporting services los toma '1,2'

     

    miércoles, 7 de mayo de 2008 20:15
  • clave_sucursal es int...

     

    @clave en el sp esta como varchar... en el reporte esta como int. Los he cambiado, es decir que en el sp y en el reporte esten del mismo tipo de dato tanto para varchar como para int y el problema es el mismo...

     

    Como decías si yo hago esto:

    declare @clave as varchar(10)

     

    set @clave='1'+','+'2'

    lo toma así:

    '1,2'

    Pero si yo hago esto:

     

    set @clave='''1'''+','+'''2'''

    lo toma asi: '1','2'

     

    Yo tmb pense que era por el tipo de datos... Pero haciendo una prueba en sql2005 con una tabla con clave de tipo char, tampoco lo hace

    Es decir

     

    declare @clave as varchar(100)

    set @clave='''clave1''' +',' + '''clave2'''

    select * from tablax where clave in (@clave )

     

    Pero Tampoco funciona...

    miércoles, 7 de mayo de 2008 20:26
  • Ahora si que no tengo idea de que puede ser tu problema, porque en mi server no tengo problemas, unicamente cuando intento ejecutar como si los datos fueran de tipo varchar.

     

    Hay que investigar que puede ser.

     

    Saludos.

    jueves, 8 de mayo de 2008 21:58