3

我在 Sql 服务器中有一个表,它将 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 来获取值但不确定如何使用正则表达式

4

1 回答 1

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
于 2013-07-25T16:19:43.987 回答