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, ',')
)