いくつかのパラメーターを含む Report Builder 3.0 レポートがあります。具体的には、アカウント番号 (データベースでは char(12) として定義されています)。データベースはベンダー提供のデータベースであるため、データベース スキーマを制御することはできません。
私の質問は、アカウント ID に自由形式のパラメーターがある場合、SQL データベースに送信されるクエリにどのように変換されるのかということです。
これらの自由形式のフィールドを処理する方法は、ユーザー定義関数を使用することです。
Public Function ConvertStringtoArray(sourceString as String) As string()
Dim arrayOfStrings() As String
Dim emptyString as String = " "
If String.IsNullOrEmpty(sourceString) Then
arrayOfStrings = emptyString.Split(",")
Else
arrayOfStrings = sourceString.Replace(" ", "").Split(",")
End If
return arrayOfStrings
End Function
パラメータは次のように定義されます: @AcctList = code.ConvertStringToArray(Parameters!AcctList.Value)
SQL クエリの where 句には次のようなものがあります: Ac.Account_ID In (@AcctList)
私の質問は、In 句をどのように構築するかです。それは文字通り次のようなものでしょうか: Where Ac.Account_ID In (N'Acct1',N'Acct2').
私はそれが重要だと思う理由は、SSMS でクエリを実行しているときに、where 句に Where Ac.Account_ID In ('TGIF') がある場合、1 秒未満で実行されるためです。 Where Ac.Account_ID In (N'TGIF') がある場合、13 秒以上かかります。返されるデータセットの合計は、わずか 917 行です。
クエリしているデータベースは 2008 R2 SP2 で、互換性は SQL 2008 に設定されています。