在SQL Server上检索值 A 和 B 的最佳方法是什么? 我有以下作为XML类型列的一部分。
<Data Name=""Teams"">
<Data DataElement=""Test"" Value=""FirstTeam=A;SecondTeam=B;""/>
</Data>
查询结果的子串是否更好(即使用sql子串)或者是否更有效地对xquery结果进行子串(即在xquery中使用子字符串)?
谢谢
答案 0 :(得分:0)
您可以使用普通的xml.nodes从xml获取该值,然后根据需求解析该值
declare @xml xml =
'<Data Name="Teams">
<Data DataElement="Test" Value="FirstTeam=A;SecondTeam=B;"/>
</Data>'
select x.r.value(N'@Value', N'varchar(100)') as val from @xml.nodes('Data/Data') as x(r)
答案 1 :(得分:0)
作为XML类型列的一部分的是什么意思?
"
符号?)Data
中的嵌套Data
...)有没有理由不这样(更好地查询!)?
<Teams>
<Team DataElement="Test" Name="A"/>
<Team DataElement="Test" Name="B"/>
</Teams>
由于XML(除了SQL Server) - 按位置固有顺序,因此您不需要“第一”或“第二”团队。好吧,你可以添加一个属性来指定这个......
如果这是大XML 的片段,你必须考虑,
<
非常快Value="
吗?)会导致意外结果...... XML
...对于SUBSTRING
你必须做一个昂贵的演员...... 所以我明确建议:使用真实XML方法导航到给定内容并将@Value
额外内容分开。
尝试这样来获取内容:
DECLARE @XML XML=
'<Data Name="Teams">
<Data DataElement="Test" Value="FirstTeam=A;SecondTeam=B;"/>
</Data>';
SELECT @XML.value('(//Data[@DataElement="Test"]/@Value)[1]','nvarchar(max)');
DECLARE @tbl TABLE(YourXMLColumn XML);
INSERT INTO @tbl VALUES
(
'<Data Name="Teams">
<Data DataElement="Test" Value="FirstTeam=A;SecondTeam=B;"/>
</Data>'
);
SELECT Team.value('.','nvarchar(max)') AS Team
FROM @tbl AS tbl
CROSS APPLY (SELECT CAST('<x>' + REPLACE(YourXMLColumn.value('(//Data[@DataElement="Test"]/@Value)[1]','nvarchar(max)'),';','</x><x>') + '</x>' AS XML)) AS Splitted(X)
CROSS APPLY X.nodes('x') AS The(Team)
结果
Team
-----------
FirstTeam=A
SecondTeam=B
(你可能会再将它分成两列,但这是你现在应该自己解决的问题:-)。
你必须拆分一个值以获得你必须再次拆分的条目这一事实清楚地表明,这不是最好的设计......