Racja, muszę dać ci pierwszeństwo.
Po zezwoleniu parametrowi SSRS na wybór wielu wartości, wybór wielu wartości tworzy ciąg wartości oddzielony przecinkami jako jeden ciąg
'value1,value2,value3'
Aby sprawdzić wartości w ciągu znaków za pomocą IN
operator potrzebujemy ciągów połączonych przecinkami, coś takiego ....
'value1','value2','value3'
Twój proces
Teraz w twoim proc, kiedy wstawiasz wartości jawnie, wstawia wiele wartości do twojej tabeli.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
a to daje oczekiwane wyniki, tak jak podczas wykonywania w procedurze instrukcji, takiej jak
SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
Z drugiej strony, gdy próbujesz wstawić do tabeli za pomocą raportu SSRS, Parametr, który wstawiasz do tabeli, wstawia wartość taką jak
INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Rozwiązanie
Tworzenie TVP
w tej sytuacji naprawdę nie pomaga, to, co robię, to korzystanie z dbo.Split()
funkcjonować w mojej procedurze.
Możesz znaleźć wiele definicji funkcji split online, dla kilku fajnych spójrz tutaj Split Function equivalent in tsql?
Po utworzeniu tej funkcji podziału po prostu użyj tej funkcji w definicji procedury, wtedy nie potrzebujesz nawet parametrów o wartościach w tabeli.
Coś takiego...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)