0

XML 列があり、ビューを作成しています。select ステートメントでは、XML 値関数で「case-when」ステートメントを使用しています。このようなもの:

...

Case TemlXMLColumn.value(...) AS TempResult
WHEN 1 THEN 'Google'
WHEN 2 THEN 'IE'
...
END

...

次に、同じ選択でこれを実行します(ただし、エラーが発生します):

...

Case TempResult
WHEN 'Google' THEN TemlXMLColumn.value(...)
ELSE ''
END

...

だから、私は今のところこれをやっています:

...

Case TemlXMLColumn.value(...) --This give me the "TempResult" so am doing the same thing twice
WHEN 'Google' THEN TemlXMLColumn.value(...)
ELSE ''
END

...

コードが重複していると見栄えがよくありません。さらに、この 2 重、さらには 3 重の同じ XML 値関数が原因で、「ビュー」と呼んでいる関数の速度が低下していると思います。

これを行う他の方法はありますか?

4

1 に答える 1

1

重複したコードの記述を避けるために、次のようにすることができます。

select
  ...
  case TempResult
     when 'Google' then TempResult
     else ''
  end
  ...
from
  ...
  cross apply (
     select
        case TempXmlColumn.value(...)
           when 1 then 'Google'
           when 2 then 'IE'
           ...
        end AS TempResult
  ) x

xml-value-function を 1 か所でのみ使用すると、同様の状況でパフォーマンスが向上するのを見てきましたが、DATEADD Sql Server などの他の組み込み関数を使用すると、結果をキャッシュして、使用しているにもかかわらず 1 回しか実行しないようです。同じクエリ内のいくつかの場所にあります。

于 2012-04-13T12:07:43.363 に答える