从列中的Xml中提取值

use*_*050 3 xml t-sql sql-server

我在Sql server中有一个表,它在一个列中存储Xml数据.Xml列数据如下所示:

<TestDef Weight="0" FailValue="2" ConceptID="-327">
  <ToleranceDef ObjectType="SomeName" TargetValue="0"TargetRange="2" />
</TestDef>
Run Code Online (Sandbox Code Playgroud)

我需要编写一个查询,从每行Xml列中取出所有的conceptId.这将是-327

我知道我可以将Xml列转换为nvarchar(max)然后使用一些reg exp来获取值但不知道如何使用正则表达式

Jos*_*Jay 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
Run Code Online (Sandbox Code Playgroud)