Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Passaggio di più parametri di valore in SSRS alla procedura memorizzata

Giusto, ho bisogno di darti un po' di background 1st.

Quando si consente al parametro SSRS di selezionare più valori, la selezione di più valori crea una stringa di valore delimitata da virgole come una stringa

  'value1,value2,value3'

Per controllare i valori in una stringa usando IN operatore abbiamo bisogno di stringhe concatenate con virgole qualcosa del genere ....

  'value1','value2','value3'

Il tuo processo

Ora nel tuo proc, quando inserisci valori in modo esplicito, inserisce più valori nella tua tabella.

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

e questo ti restituisce i risultati attesi come quando all'interno della tua procedura esegui un'istruzione come

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

D'altra parte, quando si tenta di inserire nella tabella utilizzando il parametro del rapporto SSRS, la tabella inserisce un valore come

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

Soluzione

Creazione di TVP in questa situazione non aiuta davvero, quello che faccio è usare dbo.Split() funzione all'interno della mia procedura.

Puoi trovare molte definizioni per la funzione di divisione online, per alcune interessanti dai un'occhiata qui Split Function equivalent in tsql?

Dopo aver creato questa funzione di divisione, basta usare questa funzione all'interno della definizione della procedura, quindi non sono nemmeno necessari i parametri con valori di tabella.

Qualcosa del genere...

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