Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Passando vários parâmetros de valor no SSRS para o procedimento armazenado


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