繁体   English   中英

如何在SQL Server 2008中查询XML列中的值

[英]How can I query a value in a XML column in SQL Server 2008

我将以下XML存储在SQL Server数据库表的XML列中。

<?xml version="1.0" encoding="UTF-8" ?>
<ns0:Root>
    <ns0:Result>
        <ns0:AStatus>Aaa</ns0:AStatus>
        <ns0:BStatus>Bbb</ns0:BStatus>
    </ns0:Result>
</ns0:Root>

我想通过触发SQL查询来获取值“ Aaa”。

您的XML数据不完整-使用命名空间前缀ns0而不在任何地方定义它...在示例中,我在这里添加了一些任意的,完全伪造的XML命名空间-您需要检查您所用的XML命名空间实际是什么并相应地调整样本!

尝试这个:

DECLARE @InputTable TABLE (ID INT NOT NULL, XmlData XML)

INSERT INTO @InputTable(ID, XmlData) VALUES(42, '<?xml version="1.0" encoding="UTF-8" ?>
<ns0:Root xmlns:ns0="urn:some-sample-xml-namespace">
    <ns0:Result>
        <ns0:AStatus>Aaa</ns0:AStatus>
        <ns0:BStatus>Bbb</ns0:BStatus>
    </ns0:Result>
</ns0:Root>')

-- define the XML namespace to use     
;WITH XMLNAMESPACES('urn:some-sample-xml-namespace' AS x)
SELECT 
    ID,
    XC.value('(x:AStatus)[1]', 'varchar(50)') 
FROM    
    @inputtable
CROSS APPLY
    -- get a "pseudo" table of nodes <ns0:Root>/<ns0:Result>
    XmlData.nodes('x:Root/x:Result') AS XT(XC)

基本上,您需要为XML名称空间前缀定义 -并且在针对此XML数据的SELECT中,您需要具有相同的 XML名称空间(即使-如图所示-分配给该名称空间的前缀可以不同-但名称空间必须匹配!)。

然后从表中选择数据,对于XML数据,它使用.nodes() XQuery函数来获取与该XPath表达式匹配的XML元素的列表-并将这些节点作为内存中的伪表XT使用单个XML列XC ,然后可以从中再次获取值(例如,到达第一个<ns:AStatus>元素)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM