簡體   English   中英

解析SQL Server 2012中表上的xml數據列

[英]Parse an xml data column on a table in SQL Server 2012

如何解析SQL Server 2012中的數據表上的xml列

樣本數據

<GetOfferAvailabilityResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p3="http://somewebsite.com/v2.0" xmlns="http://somewebsite.com/v2.0" p3:TransactionID="281234567">
    <p3:RuleResultList xsi:nil="true" />
    <p3:ResultList>
    <p3:ProviderResult p3:ProviderID="01" p3:ResultID="1234" p3:ResultType="NotAvailable" p3:ResultCode="NotAvailable" p3:BrokerID="55" p3:Structure="None">
    <p3:EntityState>None</p3:EntityState>
    <p3:ResultText>No Orders returned</p3:ResultText>
    <p3:ShortDescription>Not Available</p3:ShortDescription>
    <p3:LongDescription>We're sorry, but offers are currently not available for your service address.</p3:LongDescription>
    <p3:ResultAction>ErrorMessage</p3:ResultAction>
    <p3:SourceResultCode xsi:nil="true" />
        </p3:ProviderResult>
    </p3:ResultList>
    </GetOfferAvailabilityResponse>'

我試過了:

DECLARE @x xml
SET @x = 



DECLARE @test TABLE (ID INT, XmlRule XML)
Insert into @test VALUES(1,'
<GetOfferAvailabilityResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" ---GetOfferAvailabilityResponse>')                                   

當我使用Select @test.query ('\\')我會得到整個xml,但是當我嘗試Select @test.query ('\\GetOfferAvailabilityResponse')我會收到一個空結果

您可以嘗試如下操作:

DECLARE @XmlTbl TABLE (ID INT, XMLDATA XML)

INSERT INTO @XmlTbl 
        ( ID, XMLDATA )
VALUES  ( 1, '<GetOfferAvailabilityResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p3="http://somewebsite.com/v2.0" xmlns="http://somewebsite.com/v2.0" p3:TransactionID="281234567">
    <p3:RuleResultList xsi:nil="true" />
    <p3:ResultList>
    <p3:ProviderResult p3:ProviderID="01" p3:ResultID="1234" p3:ResultType="NotAvailable" p3:ResultCode="NotAvailable" p3:BrokerID="55" p3:Structure="None">
    <p3:EntityState>None</p3:EntityState>
    <p3:ResultText>No Orders returned</p3:ResultText>
    <p3:ShortDescription>Not Available</p3:ShortDescription>
    <p3:LongDescription>We''re sorry, but offers are currently not available for your service address.</p3:LongDescription>
    <p3:ResultAction>ErrorMessage</p3:ResultAction>
    <p3:SourceResultCode xsi:nil="true" />
        </p3:ProviderResult>
    </p3:ResultList>
    </GetOfferAvailabilityResponse>')

;WITH XMLNAMESPACES('http://somewebsite.com/v2.0' AS p3, DEFAULT 'http://somewebsite.com/v2.0')
SELECT
ProviderID = XmlData.value('(/GetOfferAvailabilityResponse/p3:ResultList/p3:ProviderResult/@p3:ProviderID)[1]', 'varchar(50)'),
    EntityState = XmlData.value('(/GetOfferAvailabilityResponse/p3:ResultList/p3:ProviderResult/p3:EntityState)[1]', 'varchar(50)'),
    ResultText = XmlData.value('(/GetOfferAvailabilityResponse/p3:ResultList/p3:ProviderResult/p3:ResultText)[1]', 'varchar(50)'),
    ShortDescription = XmlData.value('(/GetOfferAvailabilityResponse/p3:ResultList/p3:ProviderResult/p3:ShortDescription)[1]', 'varchar(250)'),
    LongDescription = XmlData.value('(/GetOfferAvailabilityResponse/p3:ResultList/p3:ProviderResult/p3:LongDescription)[1]', 'varchar(250)'),
    ResultAction = XmlData.value('(/GetOfferAvailabilityResponse/p3:ResultList/p3:ProviderResult/p3:ResultAction)[1]', 'varchar(50)')
FROM 
    @XmlTbl

從包含XML類型列的表中,考慮到XML數據上定義的XML名稱空間 ,選擇所需的點點滴滴

這給了我以下結果:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM