簡體   English   中英

SQL解析XML列數據

[英]SQL Parse xml column data

我對SQL Server的經驗很少。 這是我要完成的工作:

我的桌子上有很多行。 每行包含一個名為“ Config”的列。 存儲在“配置”列中的數據是xml類型。 xml結構如下所示:

<root>
 <path1>
  <path2>
   <path3>true</path3>
  </path2>
 </path1>
</root>

我試圖遍歷表中的每一行,並找到<path3>truefalse值的百分比。

我查看了一些SQL文檔,並嘗試使用value()函數,但是我很難從列中提取XML數據:

select Config.value('(/root/path1/path2/path3)[1]','nvarchar(max)') from [MyDB].[dbo].[MyTable]

這是我的查詢結果:

執行以上語句后的SQL查詢結果

我想從表的XML“ Config”列中查詢和提取數據,並將該數據聚合到列中。

使用名稱空間構建xml時,需要在查詢中指定名稱空間。 例如

CREATE TABLE tbl (Config xml);
INSERT INTO tbl (Config)
VALUES ('<root xmlns="abc">
 <path1>
  <path2>
   <path3>true</path3>
  </path2>
 </path1>
</root>') ;

然后

with xmlnamespaces (DEFAULT 'abc')
select Config.value('(/root/path1/path2/path3)[1]','nvarchar(max)') path3Txt
from tbl;

或明確的規范

with xmlnamespaces ('abc' as x)
select Config.value('(/x:root/x:path1/x:path2/x:path3)[1]','nvarchar(max)') path3Txt
from tbl;

您將需要使用CROSS APPLY。 看看這個。

的SQL

-- DDL and sample data population, start

    DECLARE @tbl TABLE (ID INT IDENTITY(1,1) PRIMARY KEY, [Config] XML);
    INSERT INTO  @tbl
    VALUES (N'<root>
        <path1>
            <path2>
                <path3>true</path3>
            </path2>
        </path1>
    </root>')
    , (N'<root>
        <path1>
            <path2>
                <path3>false</path3>
            </path2>
        </path1>
    </root>');
    -- DDL and sample data population, end

    ;WITH rs AS
    (
       SELECT ID
          , col.value('(./text())[1]','VARCHAR(20)') AS Result
        FROM @tbl tbl
          CROSS APPLY tbl.[Config].nodes('/root/path1/path2/path3') AS tab(col)
    )
    SELECT * FROM rs;

暫無
暫無

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

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