Certo, eu preciso te dar alguns fundamentos primeiro.
Quando você permite que o parâmetro SSRS selecione vários valores, a seleção de vários valores cria uma string de valor delimitada por vírgulas como uma string
'value1,value2,value3'
Para verificar valores em uma string usando
IN
operador precisamos de strings concatenadas com vírgulas algo assim .... 'value1','value2','value3'
Seu processo
Agora, em seu proc, quando você insere valores explicitamente, ele insere vários valores em sua tabela.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
e isso retorna os resultados esperados, pois quando dentro do seu procedimento você executa uma instrução como
SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
Por outro lado, quando você tenta inserir na tabela usando o parâmetro de relatório do SSRS, sua tabela insere valor como
INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Solução
Criando
TVP
nesta situação não ajuda muito, o que eu faço é usar dbo.Split()
função dentro do meu procedimento. Você pode encontrar muitas definições para função de divisão online, para algumas legais, dê uma olhada aqui
Split Function equivalent in tsql?
Uma vez que você tenha criado esta função de divisão, basta usar esta função dentro de sua definição de procedimento, você nem precisa dos parâmetros com valor de tabela então.
Algo assim...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)