0

我有一个 XML 列,我正在创建一个视图。在选择语句中,我使用带有 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

...

重复的代码看起来不太好。更重要的是,我认为由于这个我称之为“视图”的双重甚至三重相同的 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 时,我在类似的情况下看到了性能提升,但是使用 DATEADD Sql Server 等其他内置函数似乎缓存结果并且只执行一次,即使你正在使用它在同一个查询的几个地方。

于 2012-04-13T12:07:43.363 回答