0

includeなどの次の形式1_2..1_10|1_6|1_8|のテーブルにフィールドがあります。1_2..1_101_21_3

データを選択するにはどうすればよいnumber = 1_3ですか?

4

1 に答える 1

1

最初の提案:データベース構造を変更する権利を取得し、Navision 文字列をより適切に格納する方法を見つけます。

2番目の提案: CLR

これらの概念のそれぞれに比較的慣れていると仮定します。そうでない場合は、ウェブ全体で非常によく文書化されています。

私のアプローチは、C# が非常に簡単に処理できる SQL では扱いにくい高レベルのものがいくつかあるため、CLR 関数を使用することです。疑似ウォークスルーは次のようになります。

実装

  1. CLR 関数を作成し、SQL サーバー インスタンスに実装します。
  2. SQL 結果セットを使用して、"1_3" の navision フィルター値に基づいて CLR 関数の戻り値を探すようにクエリを変更します。

CLR 関数ロジック

  1. フィルター フィールドの値を受け取り、文字列値を返す ac# 関数を作成します。
  2. CLR 関数は、フィルター フィールドを | で分割します。char をリストに入れます。
  3. CLR 関数内で 2 番目のリストを作成します。最初のリストを繰り返します。範囲指定された文字列が見つかったら、それを ".." で分割し、範囲内の使用可能なすべての値を 2 番目のリストに手動で追加します。範囲外の値を見つけたら、それを 2 番目のリストに追加します。
  4. 2 番目のリストの内容を「|」で結合します。キャラクター。
  5. 結合された値を返します。

SQL ロジック

SELECT Field1,Field2...CLRFunctionName(FilterValue) AS FixedFilterValue FROM Sometable WHERE FixedFilterValue LIKE '%1_3%';
于 2013-01-23T18:16:50.240 に答える