оптимизация запроса выбора SQL - PullRequest
0 голосов
/ 09 апреля 2011

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 = "Р-Р"]

в каждом состоянии

1 Ответ

2 голосов
/ 09 апреля 2011

Вы не можете повторно использовать псевдонимы столбцов в предложении 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%'
...