Richtig, ich muss Ihnen zuerst etwas Hintergrundwissen geben.
Wenn Sie zulassen, dass der SSRS-Parameter mehrere Werte auswählt, erstellt die Auswahl mehrerer Werte eine kommagetrennte Wertzeichenfolge als eine Zeichenfolge
'value1,value2,value3'
Um Werte in einem String mit IN
zu überprüfen Operator benötigen wir Zeichenfolgen, die mit Kommas verkettet sind, etwa so ....
'value1','value2','value3'
Ihr Proc
Wenn Sie jetzt Werte explizit in Ihren Prozess einfügen, fügt er mehrere Werte in Ihre Tabelle ein.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
und dies gibt Ihnen die erwarteten Ergebnisse zurück, als ob Sie innerhalb Ihrer Prozedur eine Anweisung wie
ausführenSELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
Wenn Sie andererseits versuchen, mithilfe von SSRS-Berichtsparametern in die Tabelle einzufügen, fügt Ihre Tabelle Werte wie
ein INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Lösung
Erstellen von TVP
In dieser Situation hilft es nicht wirklich, was ich mache, ist dbo.Split()
zu verwenden Funktion innerhalb meiner Prozedur.
Sie können viele Definitionen für die Split-Funktion online finden, für ein paar coole schauen Sie hier Split Function equivalent in tsql?
Sobald Sie diese Aufteilungsfunktion erstellt haben, verwenden Sie diese Funktion einfach in Ihrer Prozedurdefinition. Sie benötigen dann nicht einmal die Tabellenwertparameter.
Etwas in der Art...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)