【问题标题】:How to query the attribute value of an XML element in SQL Server with xpath如何使用 xpath 在 SQL Server 中查询 XML 元素的属性值
【发布时间】:2016-08-23 14:18:00
【问题描述】:

我想从存储到 SQL Server 数据库表中的 XML 中读取一个属性。 我确认该列具有XML 数据类型。

我使用此查询来读取属性,但结果始终为 NULL 值。我不明白为什么。我在这里找到的所有示例都证实我做得完全正确。

SELECT 
    SDMPackageDigest.value('(//DesiredConfigurationDigest/SoftwareUpdateBundle/Annotation/DisplayName/@Text)[1]', 'NVARCHAR(256)')
FROM
    v_UpdateInfo

这是我使用的 XML 的摘录。

<DesiredConfigurationDigest xmlns="http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/07/10/DesiredConfiguration">
  <SoftwareUpdateBundle AuthoringScopeId="Site_28E438B4-CB2F-43A2-AD6B-5A993F805BCB" LogicalName="SUM_4ca07bc3-8c95-4644-be17-040a3964a02a" Version="201">
<Annotation xmlns="http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/06/14/Rules">
  <DisplayName Text="Security Update for Microsoft OneNote 2010 (KB3114885) 32-Bit Edition" />
  <Description Text="A security vulnerability exists in Microsoft OneNote 2010 32-Bit Edition that could allow arbitrary code to run when a maliciously modified file is opened. This update resolves that vulnerability." />
</Annotation>
...

【问题讨论】:

    标签: sql-server xml xpath sql-server-2012


    【解决方案1】:

    您需要尊重 XML 命名空间!

    试试这样的:

    ;WITH XMLNAMESPACES(DEFAULT 'http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/07/10/DesiredConfiguration',
                               'http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/06/14/Rules' AS ns)
    SELECT 
        SDMPackageDigest.value('(/DesiredConfigurationDigest/SoftwareUpdateBundle/ns:Annotation/ns:DisplayName/@Text)[1]', 'NVARCHAR(256)')
    FROM
        v_UpdateInfo
    

    【讨论】:

    • 谢谢。这样可行。而且我看到了如何将它与其他 XML 内容一起使用。
    【解决方案2】:
    SELECT @x.value('(/*:DesiredConfigurationDigest/*:SoftwareUpdateBundle/*:Annotation/*:DisplayName/@Text)[1]', 'NVARCHAR(256)')
    

    【讨论】:

    • 谢谢,但我不知道如何使用这个:(
    猜你喜欢
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多