gpt4 book ai didi

sql-server - MS SQL-Server 中具有多个 XML 命名空间的 t-sql

转载 作者:行者123 更新时间:2023-12-04 16:58:59 27 4
gpt4 key购买 nike

大家好,

这类似于其他命名空间问题(例如 StackOverflow Question ),但我似乎无法让我的查询工作。

我有一堆 XML 文档,我把它们放在 MS SQL Server 中,我需要从中提取数据,但我无法控制它们的格式。由于我认为是多个命名空间,我遇到了麻烦。

这是一个示例。

DECLARE @table TABLE (ID INT NOT NULL, XmlContent XML)

INSERT INTO @table VALUES
(1,
'<PyroSmartDO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="PyroSmartDO_1_1.xsd" Major="0" Minor="0" Build="0" Revision="0">
<Run Name="1-8-12" CreatedBy="user" CreatedDate="2012-08-02T10:39:33" Status="FINISHED" Type="SQA">
<RunInfo>
<WellInfos>
<WellInfo WellNr="H12">
<Sample CreatedDate="2012-08-14T16:44:27.765625+05:30">
<Note>11- 0129</Note>
</Sample>
</WellInfo>
<WellInfo WellNr="H11">
<Sample CreatedDate="2012-08-14T16:44:27.765625+05:30">
<Note>11- 0128</Note>
</Sample>
</WellInfo>
<WellInfo WellNr="H10">
<Sample CreatedDate="2012-08-14T16:44:27.765625+05:30">
<Note>11- 0127</Note>
</Sample>
</WellInfo>
</WellInfos>
</RunInfo>
</Run>
</PyroSmartDO>')


SELECT * FROM @table;

SELECT
Content = XmlContent.value('(/PyroSmartDO/Run/RunInfo/WellInfos/WellInfo/Sample/Note)[1]', 'varchar(50)')

FROM @table
WHERE ID = 1

我是 XML 和 MS SQL Server 的新手,所以其中一些东西对我来说真的很模糊。
  • 我得到了正确的 XML 文档(SELECT *),但我得到的不是 Content='11-0129',而是 Content=NULL。如果我去掉 xmlns="PyroSmartDO_1_1.xsd"查询有效。我真的对命名空间感到困惑,似乎无法让查询在那里使用它。
  • 我其实很想得到所有的样本(我只展示了三个,实际文档有几十个)
  • 我通常使用 CROSS APPLY 遍历 XML 节点,这个查询似乎在没有它的情况下导航 XML。

  • 先感谢您 !

    最佳答案

    由于您对 XML 格式没有任何控制权,因此您可以通过使用以下通配符来掩盖您的命名空间问题:

    SELECT Content = XmlContent.value('(//*:Note)[1]', 'varchar(50)')
    FROM @table
    WHERE ID = 1

    但是,您将需要 CROSS APPLY,因为您将需要所有 Note 值而不仅仅是 [1]。

    例如:
    SELECT Content = T.c.value('.', 'VARCHAR(50)')
    FROM @table
    CROSS APPLY
    XmlContent.nodes('//*:Note') T(c)

    关于sql-server - MS SQL-Server 中具有多个 XML 命名空间的 t-sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23252521/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com