是否可以在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>
如何选择所有具有“奖励日费率”的记录来获取其值?
提前谢谢
答案 0 :(得分:1)
这是一种方式:
SELECT @x.query('(//EntityPropertyOfString[./Name="Bonus Day Rate"]/Value)').value('(.)[1]', 'int')
基本上,您会找到名为EntityPropertyOfString的所有节点,并查找具有Name子节点的特定节点,其值为“Bonus Day Rate。该位置由方括号表示;一旦您拥有该节点您将查询Value子节点的第一个位置,并将其转换为int。
答案 1 :(得分:0)
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