繁体   English   中英

查询 XML 节点给我 NULL 值

[英]Query to XML Node is giving me NULL Value

试图实现报表服务器中每个报表使用的存储过程。

INSERT INTO #ReportRawXML
    SELECT  
        ItemID, RPT.[Name] AS ReportName,
        CONVERT(XML, CONVERT(VARBINARY(MAX), RPT.Content)) AS XMLdata
    FROM    
        ReportServer.dbo.[Catalog] AS RPT
    WHERE 
        RPT.[Name] LIKE '%catalog%'

XML 样品:

<Report>
<DataSets>
    <DataSet Name="DSET_ReportRepository">
      <Query>
        <DataSourceName>CCA_PROD</DataSourceName>
    </Query>
</DataSets>
</Report>

我有一个表,其中包含我想查询的XML列,但我得到了 NULL 回来; 我尝试了所有可能的方法,请高人指点。

SELECT 
    b.ItemID, b.ReportName,
    n.c.value('@DataSourceName', 'VARCHAR(MAX)') AS id,
    n.c.value('/DataSourceName[1]', 'VARCHAR(500)') AS DataSourceName,
    n.c.value('/CommandType[1]', 'VARCHAR(100)') AS CommandType,
    n.c.value('/CommandText[1]', 'VARCHAR(100)') AS CommandText
FROM    
    #ReportRawXML b
OUTER APPLY 
    b.XMLdata.nodes('/Report/DataSets/DataSet/Query') AS n(c)

问题:在上面的第 3 列中得到 NULL

您下一个问题的一些提示:

  • 请尝试从一开始就添加 MCVE(我在此处为您提供的独立示例)。 你知道你所有的细节,但我们不...
  • 尝试添加一个示例,该示例包含所有内容(例如,您的示例不显示任何CommandTypeCommandText
  • 请阅读有关 SO 如何添加代码、普通文本、如何突出显示或引用的内部格式化工具...
  • 请自行运行您的示例。 这样做,您会发现,提供的 XML 格式不正确(缺少</DataSet> )。

但现在你的问题:

DECLARE @mockupTable TABLE(ID INT IDENTITY, XMLdata XML);
INSERT INTO @mockupTable VALUES
(N'<Report>
    <DataSets>
        <DataSet Name="DSET_ReportRepository">
          <Query>
            <DataSourceName>CCA_PROD</DataSourceName>
          </Query>
        </DataSet>
    </DataSets> 
</Report>');

--查询

SELECT b.ID
      ,ds.value('(Query/DataSourceName/text())[1]', 'varchar(max)') as id
      ,ds.value('@Name', 'varchar(max)') as id
FROM    @mockupTable b
OUTER APPLY b.XMLdata.nodes('/Report/DataSets/DataSet') as  n(ds);

从 XML 中阅读您必须知道,名称前的@表示一个属性。 要读取DataSetName属性,您需要这个,但不是在您自己尝试的DataSourceName之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM