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