LIKE と複数値のパラメーターを一緒に使用したいのですが、うまくいきません。ただし、Reporting Services を使用すると、必要なことはほとんど何でも実行できます。解決策は、カスタム コードと式を使用することです。まず、次のように SQL ステートメントを式に変更します。
="SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, "
&"COMPANY_M, CONSECUTIVE_D "
&"FROM TEMP_TARGET "
&"WHERE (CONSECUTIVE_D >= @consecDays) "
&"AND (ENTRY_DT BETWEEN @startDate AND @endDate) "
&"AND ((@accessvar IS NULL) OR (ACCESS_LOCATION_X LIKE @accessVar)) "
&"AND ((@icVar IS NULL) OR (IC_N LIKE @icVAr)) "
したがって、SQL ステートメントは実際には、実行される SQL 式に評価される文字列式です。
LIKE
次に、カスタム コードを使用して、複数値パラメーターを一連のステートメントに変換する必要があります。次のカスタム コードをレポートに追加します (レポートを右クリックし、[プロパティ] を選択して [コード] タブをクリックします)。
Function AccessLocations (ByVal parameter As Parameter) AS String
Dim Result As String
If parameter.IsMultiValue then
Result = "AND ( "
For i as integer = 0 to parameter.Count-1
Result = Result + "(ACCESS_LOCATION LIKE '" + CStr(parameter.Value(i)) + "') OR "
Next
Result = Left(Result, Result.Length - 3) +") "
Else
Result = "AND (ACCESS_LOCATION LIKE '" + CStr(parameter.Value) + "') "
End If
Return Result
End Function
次に、この関数を SQL ステートメントの一部として呼び出します。
Code.AccessLocations(Parameters!accessvar)
したがって、完全な SQL は次のとおりです。
="SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, "
&"COMPANY_M, CONSECUTIVE_D "
&"FROM TEMP_TARGET "
&"WHERE (CONSECUTIVE_D >= @consecDays) "
&"AND (ENTRY_DT BETWEEN @startDate AND @endDate) "
& Code.AccessLocations(Parameters!accessvar)
&"AND ((@icVar IS NULL) OR (IC_N LIKE @icVAr)) "
パラメータに%
ワイルドカードが含まれている場合、これは機能します。それ以外の場合は、ワイルドカードを関数に追加します。