sql >> Base de Datos >  >> RDS >> Sqlserver

Pasar múltiples parámetros de valor en SSRS al procedimiento almacenado

Bien, necesito darte algunos antecedentes primero.

Cuando permite que el parámetro SSRS seleccione múltiples valores, la selección de múltiples valores crea una cadena de valor delimitada por comas como una sola cadena

  'value1,value2,value3'

Para verificar valores en una cadena usando IN operador necesitamos cadenas concatenadas con comas algo como esto ....

  'value1','value2','value3'

Tu proceso

Ahora, en su proceso, cuando inserta valores explícitamente, inserta múltiples valores en su tabla.

  INSERT INTO Table_Value_Param
  VALUES ('value1'),       --<-- 1st value/Row
         ('value2'),       --<-- 2nd Value/Row
         ('value3')        --<-- 3rd Value/Row

y esto le devuelve los resultados esperados cuando dentro de su procedimiento ejecuta una declaración como

SELECT * 
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName 
                     FROM Table_Value_Param)

Por otro lado, cuando intenta insertar en la tabla usando el parámetro de informe de SSRS, la tabla inserta un valor como

  INSERT INTO Table_Value_Param
  VALUES ('value1,value2,value3')   --<-- One Row/Value containing all the values comma separated

Solución

Creando TVP en esta situación realmente no ayuda, lo que hago es usar dbo.Split() función dentro de mi procedimiento.

Puede encontrar muchas definiciones para la función dividida en línea, para algunas interesantes, eche un vistazo aquí Split Function equivalent in tsql?

Una vez que haya creado esta función de división, simplemente use esta función dentro de la definición de su procedimiento, entonces ni siquiera necesita los parámetros con valores de la tabla.

Algo así...

  SELECT * 
  FROM Table_Name 
  WHERE ColumnName IN ( 
                       SELECT Value
                       FROM dbo.Split(@Report_Param, ',')
                       )