如何解决如何从SQL的XML列中选择值?
我将以下XML存储在名为Sub_FORM的SQL Server表的XML列(称为XML_FORM)中,我需要为“ txtOriginalIdFacility”字段提取值(00006789)。
<DynamicFormValue><GOVf1154><dataField><id>ucGOVf1154_MainForm</id><value /><tag />
<visible>true</visible><history>|3/7/2019 4:40:49 PM|LGeorge||</history><description /><comment />
</dataField><dataField><id>rdoOption_NOI</id><value>false</value><tag /><visible>true</visible>
<history>false|3/7/2019 4:40:49 PM|LGeorge||</history><description /><comment /></dataField>
<dataField><id>rdoOption_NEE</id><value>true</value><tag /><visible>true</visible>
<history>true|3/7/2019 4:40:49 PM|LGeorge||</history><description /><comment /></dataField>
<dataField><id>rdoOption_NOT</id><value>false</value><tag /><visible>true</visible>
<history>false|3/7/2019 4:40:49 PM|LGeorge||</history><description /><comment /></dataField>
<dataField><id>txtForm</id><value>NEE Form</value><tag /><visible>false</visible><history>
Form|3/7/2019 4:40:49 PM|LGeorge||</history><description /><comment /></dataField><dataField>
<id>txtForm_F1</id><value>NOI Form</value><tag /><visible>false</visible><history>Form|3/7/2019
4:40:49 PM|LGeorge||</history><description /><comment /></dataField><dataField><id>txtForm_F2</id>
<value>NEE Form</value><tag /><visible>false</visible><history>Form|3/7/2019 4:40:49 PM|LGeorge||
</history><description /><comment /></dataField><dataField><id>txtForm_F3</id><value>NOT Form</value>
<tag /><visible>false</visible><history> Form|3/7/2019 4:40:49 PM|LGeorge||</history><description />
<comment /></dataField></GOVf1154><GOVf1154_NEE><dataField><id>rdoType</id><value>Initial
Notification</value><tag /><visible>true</visible><history>Initial Notification|3/7/2019 4:41:15
PM|Lge||</history><description /><comment /></dataField><dataField><id>txtFormerOwnerName</id><value
/><tag /><visible>true</visible><history>|3/7/2019 4:41:15 PM|LG||</history><description /><comment
/></dataField><dataField><id>ucontrolFacility</id><value /><tag /><visible>true</visible>
<history>|3/13/2019 11:12:01 AM|LP||</history><description /><comment /></dataField><dataField>
<id>chkInternationalMailingAddress</id><value>false</value><tag /><visible>true</visible>
<history>false|3/7/2019 4:41:15 PM|LG||</history><description /><comment /></dataField><dataField>
<id>txtInternationalMailingAddress</id><value /><tag>International Mailing Address</tag>
<visible>false</visible><history>|3/7/2019 4:41:15 PM|LGeorge||</history><description /><comment />
</dataField><dataField><id>ddlFacility</id><value>20000</value><tag /><visible>false</visible>
<history>251750|3/7/2019 4:41:15 PM|LGeorge||</history><description /><comment /></dataField>
<dataField><id>txtFacilityName</id><value>FB</value><tag>Facility</tag><visible>false</visible>
<history>|3/7/2019 4:41:15 PM|LGeorge||#! (FH)|3/13/2019 11:12:01 AM|LPurvis||</history>
<description/><comment /></dataField><dataField><id>txtOriginalIdFacility</id><value>00006789</value>
解决方法
我认为您正在尝试说“获取id元素的值,其中父dataField节点的id元素的值为'txtOriginalIdFacility'”。使用value
函数返回标量值,并提供完整的XPath查询以查找元素,如下所示:
-- Get the value element where the parent dataField node has an id element with the value "txtOriginalIdFacility"
SELECT XML_FORM.value('(DynamicFormValue/GOVf1154_NEE/dataField[id = "txtOriginalIdFacility"]/value)[1]','VARCHAR(50)')
FROM Sub_FORM
使用表变量作为示例的完整测试脚本:
DECLARE @Sub_FORM TABLE ( XML_FORM XML )
INSERT INTO @Sub_FORM
SELECT '<DynamicFormValue>
<GOVf1154>
<dataField>
<id>ucGOVf1154_MainForm</id>
<value />
<tag />
<visible>true</visible>
<history>|3/7/2019 4:40:49 PM|LGeorge||</history>
<description />
<comment />
</dataField>
<dataField>
<id>rdoOption_NOI</id>
<value>false</value>
<tag />
<visible>true</visible>
<history>false|3/7/2019 4:40:49 PM|LGeorge||</history>
<description />
<comment />
</dataField>
<dataField>
<id>rdoOption_NEE</id>
<value>true</value>
<tag />
<visible>true</visible>
<history>true|3/7/2019 4:40:49 PM|LGeorge||</history>
<description />
<comment />
</dataField>
<dataField>
<id>rdoOption_NOT</id>
<value>false</value>
<tag />
<visible>true</visible>
<history>false|3/7/2019 4:40:49 PM|LGeorge||</history>
<description />
<comment />
</dataField>
<dataField>
<id>txtForm</id>
<value>NEE Form</value>
<tag />
<visible>false</visible>
<history>Form|3/7/2019 4:40:49 PM|LGeorge||</history>
<description />
<comment />
</dataField>
<dataField>
<id>txtForm_F1</id>
<value>NOI Form</value>
<tag />
<visible>false</visible>
<history>Form|3/7/2019 4:40:49 PM|LGeorge||</history>
<description />
<comment />
</dataField>
<dataField>
<id>txtForm_F2</id>
<value>NEE Form</value>
<tag />
<visible>false</visible>
<history>Form|3/7/2019 4:40:49 PM|LGeorge||
</history>
<description />
<comment />
</dataField>
<dataField>
<id>txtForm_F3</id>
<value>NOT Form</value>
<tag />
<visible>false</visible>
<history> Form|3/7/2019 4:40:49 PM|LGeorge||</history>
<description />
<comment />
</dataField>
</GOVf1154>
<GOVf1154_NEE>
<dataField>
<id>rdoType</id>
<value>Initial Notification</value>
<tag />
<visible>true</visible>
<history>Initial Notification|3/7/2019 4:41:15 PM|Lge||</history>
<description />
<comment />
</dataField>
<dataField>
<id>txtFormerOwnerName</id>
<value/>
<tag />
<visible>true</visible>
<history>|3/7/2019 4:41:15 PM|LG||</history>
<description />
<comment/>
</dataField>
<dataField>
<id>ucontrolFacility</id>
<value />
<tag />
<visible>true</visible>
<history>|3/13/2019 11:12:01 AM|LP||</history>
<description />
<comment />
</dataField>
<dataField>
<id>chkInternationalMailingAddress</id>
<value>false</value>
<tag />
<visible>true</visible>
<history>false|3/7/2019 4:41:15 PM|LG||</history>
<description />
<comment />
</dataField>
<dataField>
<id>txtInternationalMailingAddress</id>
<value />
<tag>International Mailing Address</tag>
<visible>false</visible>
<history>|3/7/2019 4:41:15 PM|LGeorge||</history>
<description />
<comment />
</dataField>
<dataField>
<id>ddlFacility</id>
<value>20000</value>
<tag />
<visible>false</visible>
<history>251750|3/7/2019 4:41:15 PM|LGeorge||</history>
<description />
<comment />
</dataField>
<dataField>
<id>txtFacilityName</id>
<value>FB</value>
<tag>Facility</tag>
<visible>false</visible>
<history>|3/7/2019 4:41:15 PM|LGeorge||#! (FH)|3/13/2019 11:12:01 AM|LPurvis||</history>
<description/>
<comment />
</dataField>
<dataField>
<id>txtOriginalIdFacility</id>
<value>00006789</value>
</dataField>
</GOVf1154_NEE>
</DynamicFormValue>'
-- Get the value for the id element where the parent dataField node has a id element with the value "txtOriginalIdFacility"
SELECT XML_FORM.value('(DynamicFormValue/GOVf1154_NEE/dataField[id = "txtOriginalIdFacility"]/value)[1]','VARCHAR(50)')
FROM @Sub_FORM
我的结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。