优化sql xml选择查询

时间:2011-04-09 18:34:31

标签: sql sql-server tsql query-optimization xquery-sql

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%')

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

  

'//语言[@名称= “RU-茹”]'

在每种情况下

1 个答案:

答案 0 :(得分: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%'