そうですね、最初に背景を説明する必要があります。
SSRS パラメータで複数の値を選択できるようにすると、複数の値を選択すると、コンマで区切られた値の文字列が 1 つの文字列として作成されます
'value1,value2,value3'
IN
を使用して文字列の値をチェックするには 演算子には、次のようなコンマで連結された文字列が必要です ....
'value1','value2','value3'
あなたの手続き
proc で値を明示的に挿入すると、テーブルに複数の値が挿入されます。
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
これにより、プロシージャ内で
のようなステートメントを実行した場合と同様に、期待される結果が返されます。SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
一方、SSRS レポート パラメータを使用してテーブルに挿入しようとすると、テーブルは
のような値を挿入します。 INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
解決策
TVP
の作成 この状況では本当に役に立ちません。私がしているのは dbo.Split()
を利用することです
オンラインで分割関数の多くの定義を見つけることができます。いくつかのクールなものについては、こちらをご覧ください Split Function equivalent in tsql?
この分割関数を作成したら、プロシージャ定義内でこの関数を使用するだけで、テーブル値パラメーターは必要ありません。
このようなもの...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)