0

XML

<Data>
  <Language Name="ru-Ru">
    <Item Id="1">value</Item>
    <Item Id="2">value2</Item>
  </Language>
</Data>

是否可以像这样以某种方式运行它,以简单地查询:

SELECT id, 
       userId, 
       data.query('//Language[@Name="ru-Ru"]') AS myxml
  FROM UserData
 WHERE (myxml.query('//Item[@Id="9"]') like '%v%')

总而言之,我需要对每个项目进行参数比较并且不想重复

'//语言[@Name="ru-Ru"]'

在每种情况下

4

1 回答 1

2

您不能在 where 子句中重用别名列。你可以cross apply用来做你想做的事。并且您需要强制转换 where 子句才能使用like.

select
  id, 
  userId, 
  myxml
from @T
  cross apply
    (select data.query('//Language[@Name="ru-Ru"]')) as lang(myxml)
where cast(myxml.query('//Item[@Id="9"]') as varchar(max)) like '%v%'
于 2011-04-09T19:53:45.290 回答