簡體   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