簡體   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