从 sql 中的 xml 获取属性和元素值
Get attribute and element values from xml in sql
我有以下 XML 并且需要将此数据拉入 sql table 以获取属性名称和所有元素值
declare @GetQuoteXML xml
set @GetQuoteXML = '<QuoteRequest>
<QuoteRisk>
<ChildControls parent = "MainPerson">
<OccupationID>347</OccupationID>
<OccupationDescription />
<OccupationOtherDescription>accountant</OccupationOtherDescription>
</ChildControls>
<ChildControls parent = "OtherPerson">
<OccupationID>200</OccupationID>
<OccupationDescription />
<OccupationOtherDescription>engineer</OccupationOtherDescription>
</ChildControls>
</QuoteRisk>
</QuoteRequest>'
我的 SQL 是
SELECT
AttributeName = ChildControls.value('(//ChildControls/@parent)[1]','varchar(50)'),
NodeName = ChildControls.value('local-name(.)', 'varchar(50)'),
NodeValue = ChildControls.value('(.)[1]', 'varchar(50)')
FROM @GetQuoteXML.nodes('//ChildControls/*') AS ChildControlTable(ChildControls)
但结果似乎总是在 'Mainperson' 属性下,而不是 return AttributeName 列中的 'OtherPerson'
AttributeName NodeName NodeValue
MainPerson OccupationID 347
MainPerson OccupationDescription
MainPerson OccupationOtherDescription accountant
MainPerson OccupationID 200
MainPerson OccupationDescription
MainPerson OccupationOtherDescription engineer
我想要的结果是:
AttributeName NodeName NodeValue
MainPerson OccupationID 347
MainPerson OccupationDescription
MainPerson OccupationOtherDescription accountant
OtherPerson OccupationID 200
OtherPerson OccupationDescription
OtherPerson OccupationOtherDescription engineer
我对此比较陌生,似乎无法弄清楚这一点,请帮忙,因为这可能很简单!
这就是你需要的:
SELECT
AttributeName = ChildControls.value('../@parent','varchar(50)'),
NodeName = ChildControls.value('local-name(.)', 'varchar(50)'),
NodeValue = ChildControls.value('(.)[1]', 'varchar(50)')
FROM @GetQuoteXML.nodes('//ChildControls/*') AS ChildControlTable(ChildControls)
结果:
我有以下 XML 并且需要将此数据拉入 sql table 以获取属性名称和所有元素值
declare @GetQuoteXML xml
set @GetQuoteXML = '<QuoteRequest>
<QuoteRisk>
<ChildControls parent = "MainPerson">
<OccupationID>347</OccupationID>
<OccupationDescription />
<OccupationOtherDescription>accountant</OccupationOtherDescription>
</ChildControls>
<ChildControls parent = "OtherPerson">
<OccupationID>200</OccupationID>
<OccupationDescription />
<OccupationOtherDescription>engineer</OccupationOtherDescription>
</ChildControls>
</QuoteRisk>
</QuoteRequest>'
我的 SQL 是
SELECT
AttributeName = ChildControls.value('(//ChildControls/@parent)[1]','varchar(50)'),
NodeName = ChildControls.value('local-name(.)', 'varchar(50)'),
NodeValue = ChildControls.value('(.)[1]', 'varchar(50)')
FROM @GetQuoteXML.nodes('//ChildControls/*') AS ChildControlTable(ChildControls)
但结果似乎总是在 'Mainperson' 属性下,而不是 return AttributeName 列中的 'OtherPerson'
AttributeName NodeName NodeValue
MainPerson OccupationID 347
MainPerson OccupationDescription
MainPerson OccupationOtherDescription accountant
MainPerson OccupationID 200
MainPerson OccupationDescription
MainPerson OccupationOtherDescription engineer
我想要的结果是:
AttributeName NodeName NodeValue
MainPerson OccupationID 347
MainPerson OccupationDescription
MainPerson OccupationOtherDescription accountant
OtherPerson OccupationID 200
OtherPerson OccupationDescription
OtherPerson OccupationOtherDescription engineer
我对此比较陌生,似乎无法弄清楚这一点,请帮忙,因为这可能很简单!
这就是你需要的:
SELECT
AttributeName = ChildControls.value('../@parent','varchar(50)'),
NodeName = ChildControls.value('local-name(.)', 'varchar(50)'),
NodeValue = ChildControls.value('(.)[1]', 'varchar(50)')
FROM @GetQuoteXML.nodes('//ChildControls/*') AS ChildControlTable(ChildControls)
结果: