none
Parámetros multivalor y procedimientos almacenados en Reporting Services RRS feed

  • Pregunta

  • Buenas tardes,

    Estoy creando informes con Reporting Services y necesito pasarle parámetros multivalor a un procedimiento almacenado, pero de momento sólo he conseguido que me funcione con variables escalares. ¿Hay alguna manera de hacerlo? Concretamente necesito pasarle una lista de pedidos que selecciona el propio usuario, pudiendo seleccionar uno, diez o los que quiera. Gracias.

     

    • Cambiado Fran DiazModerator jueves, 21 de mayo de 2009 17:00 Reporting ([Loc]From:Lenguaje VB.NET)
    lunes, 28 de abril de 2008 16:04

Todas las respuestas

  • Hola Unai80,

     

    ¿Has probado a pasarle tú mediante un parámetro de tipo string el valor del sp con los valores según lo elegido?.

     

    Un Saludo

    martes, 29 de abril de 2008 13:44
    Moderador
  •  

    Gracias por responderme. Hasta el momento tu blog me ha servido de gran ayuda. Pero me temo que no entiendo lo que me propones.

     

    El parámetro del informe es de tipo consulta, permite valor en blanco y además debe ser multivalor, para que el usuario pueda escoger uno o varios de una lista. Pero me da un error. Me dice que tengo que declarar una variable escalar. Cómo solución, en lugar de utilizar el parámetro como parámetro de consulta, es decir, pasándole al stored procedure, lo estoy utilizando como parámetro de filtro, con lo que una vez la consulta me devuelve los datos, los filtro por este parámetro. Aún así me gustaría saber cual es la manera de pasarle parámetros multivalor a un stored procedure. Gracias.

    martes, 29 de abril de 2008 15:44
  • Hola, ps solucione ese tipo de inconveniente creando una función escalar, 

    CREATE FUNCTION [dbo].[fn_MVParam]
       (@RepParam varchar(8000), @Delim char(1)= ',')
    RETURNS @Values TABLE (Param varchar(8000))AS
      BEGIN
      DECLARE @chrind INT
      DECLARE @Piece nvarchar(100)
      SELECT @chrind = 1 
      WHILE @chrind > 0
        BEGIN
          SELECT @chrind = CHARINDEX(@Delim,@RepParam)
          IF @chrind  > 0
            SELECT @Piece = LEFT(@RepParam,@chrind - 1)
          ELSE
            SELECT @Piece = @RepParam
          INSERT  @Values(Param) VALUES(CAST(@Piece AS VARCHAR))
          SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind)
          IF LEN(@RepParam) = 0 BREAK
        END
      RETURN
      END

    en el where del procedimiento

    AND (Tabla.Campo In(SELECT Param FROM dbo.fn_MVParam(@Parametro,','))or @Parametro  = '-')

    , con esto puedes pasarle una lista de valores separados por coma (,) o el guion (-) para que traiga todos!!

    esto es para cuando son varchar los parametros

    jueves, 17 de enero de 2013 15:14