поиск конкретного имени сущности в столбцах sql xml таблицы - PullRequest
1 голос
/ 13 декабря 2011

Можно ли искать имена сущностей в столбце sql?

Например, если у меня есть столбец, который выглядит как

<ArrayOfEntityPropertyOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EntityPropertyOfString>
<Name>User Label 1</Name>
<Value>TX</Value>
 </EntityPropertyOfString>
 <EntityPropertyOfString>
<Name>PD Rate</Name>
<Value>0</Value>
</EntityPropertyOfString>
<EntityPropertyOfString>
<Name>Bonus Day Rate</Name>
<Value>300</Value>
</EntityPropertyOfString>
</ArrayOfEntityPropertyOfString>

Как выбрать все записи, которые имеют«Бонусный дневной тариф», чтобы получить его значение ??

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Вот один из способов:

SELECT @x.query('(//EntityPropertyOfString[./Name="Bonus Day Rate"]/Value)').value('(.)[1]', 'int')

По сути, вы находите все узлы с именем EntityPropertyOfString и ищете конкретный узел, который имеет дочерний подузел Name со значением «Бонус дневной ставки».Эта позиция указывается в квадратных скобках: как только у вас есть эта позиция, вы запрашиваете дочерний узел Value для первой позиции и приводите его к типу int.

0 голосов
/ 13 декабря 2011
declare @T table (ID int identity primary key, XMLCol xml)

declare @xml xml =
'<ArrayOfEntityPropertyOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<EntityPropertyOfString>
<Name>User Label 1</Name>
<Value>TX</Value>
 </EntityPropertyOfString>
 <EntityPropertyOfString>
<Name>PD Rate</Name>
<Value>0</Value>
</EntityPropertyOfString>
<EntityPropertyOfString>
<Name>Bonus Day Rate</Name>
<Value>300</Value>
</EntityPropertyOfString>
</ArrayOfEntityPropertyOfString>'

insert into @T values (@xml)
insert into @T values (@xml)

select T1.ID,
       T2.N.value('Value[1]', 'int') as Value
from @T as T1
  cross apply T1.XMLCol.nodes('/ArrayOfEntityPropertyOfString/EntityPropertyOfString[Name = "Bonus Day Rate"]') as T2(N)

Результат:

ID          Value
----------- -----------
1           300
2           300
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...