我在Sql server中有一个表,它将Xml数据存储在其中一个列中。 Xml列数据如下所示:
<TestDef Weight="0" FailValue="2" ConceptID="-327">
<ToleranceDef ObjectType="SomeName" TargetValue="0"TargetRange="2" />
</TestDef>
我需要编写一个查询,从每行Xml列中取出所有的conceptId。 这将是-327
我知道我可以将Xml列转换为nvarchar(max)然后使用一些reg exp来获取值但不确定如何使用正则表达式
答案 0 :(得分:5)
这是使用表变量的示例。它与实际表格的概念相同:
Declare @XmlTable table (
Id Integer Identity,
XmlValue XML
)
Insert Into @XmlTable (XmlValue) values ('<TestDef Weight="0" FailValue="2" ConceptID="-327"><ToleranceDef ObjectType="SomeName" TargetValue="0" TargetRange="2" /></TestDef>')
Insert Into @XmlTable (XmlValue) values ('<TestDef Weight="0" FailValue="2" ConceptID="-325"><ToleranceDef ObjectType="SomeName" TargetValue="0" TargetRange="2" /></TestDef>')
select
Id,
XmlValue,
XmlValue.value('(/TestDef/@ConceptID)[1]', 'integer') as ConceptId
from
@XmlTable