Usuario
Ayuda con Reporting server y Store Procedure

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)
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.
-
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!
-
-
-
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!!
-
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.
-
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.
-
-
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...
-
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).
-
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!!!
-
-
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!!!
-
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.
-
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'
-
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...
-