2009-06-19 101 views
0

我有一個項目來更新SSRS實例的所有報告,並認爲我會得到一個所有報告到Excel的列表,所以我可以勾選它們,因爲我更新每個報告。我很容易想到。我不經常使用它(完全),但XML似乎適用於此。我想有這樣的事情:XML嵌套文件夾內容

<Server> 
    <ReportFolder> 
    <ReportFolder> 
     <Report> 
     </Report> 
     <Report> 
     </Report> 
    </ReportFolder> 
    <Report> 
    </Report> 
    <Report> 
    </Report> 
    <Report> 
    </Report> 
    </ReportFolder> 
    <ReportFolder> 
    </ReportFolder> 
</Server> 

目錄表是我的數據源,但其項目ID和PARENTID這樣我就可以辨別物體和它們的層次,但我不能讓XML格式完整的服務器,我可以得到一個文件夾的內容,如果我指定文件夾(名稱或ItemID),但不是整個服務器。當我拿出WHERE項目ID = 1234線我得到的是這樣的:

<Server> 
    <ReportFolder> 
    </ReportFolder> 
    <ReportFolder> 
    </ReportFolder> 
    <ReportFolder> 
    </ReportFolder> 
    <Report> 
    </Report> 
    <Report> 
    </Report> 
    <Report> 
    </Report> 
    <Report> 
    </Report> 
    <Report> 
    </Report> 
</Server> 

我已經試過CTE的XML AUTO,XML明確,我現在越來越覺得我的解離迄今與XML是有道理的!

有沒有辦法在XML表單中獲得完整(最多4層)的層次結構?

這是不是與XML相關的東西,我已經走錯了轉變成死衚衕?

+0

你有一組示例行嗎?我目前沒有安裝SSRS,因此我沒有任何樣本數據可供使用。我認爲遞歸CTE對此可以很好地工作。 – ahains 2009-06-19 13:23:57

回答

0

所以,好消息和壞消息。這是個好消息。

CREATE FUNCTION [dbo].[GetReportTree](@ItemId uniqueidentifier) 
RETURNS XML 
BEGIN RETURN 
    (SELECT ca.ItemId AS '@ItemId', 
      ca.Name AS '@Name', 
      ca.Type AS '@Type', 
      dbo.GetReportTree(ca.ItemId) 
    FROM dbo.Catalog ca 
    WHERE (@ItemId IS NULL AND ParentId IS NULL) OR [email protected] 
    FOR XML PATH('CatalogItem'), TYPE) 
END 

SELECT dbo.[GetReportTree](NULL) 

產生一個層次是這樣的:

<CatalogItem Name="" Type="1"> 
    <CatalogItem Name="ScrumTest" Type="1"> 
    <CatalogItem Name="(Hidden) Delta Report Small" Type="2" /> 
    <CatalogItem Name="(Hidden) Product Burndown Chart Small" Type="2" /> 
    <CatalogItem Name="(Hidden) Product Cumulative Flow Small" Type="2" /> 
    <CatalogItem Name="(Hidden) Sprint Burndown Chart Small" Type="2" /> 
    <CatalogItem Name="All Product Backlog Items" Type="2" /> 
    <CatalogItem Name="All Sprint Backlog Items" Type="2" /> 
    <CatalogItem Name="All Sprints" Type="2" /> 
    <CatalogItem Name="Current Sprint Status" Type="2" /> 
    <CatalogItem Name="Delta Report" Type="2" /> 
    <CatalogItem Name="Engineering Reports" Type="1"> 
     <CatalogItem Name="(Hidden) Bug History Chart Small" Type="2" /> 
     <CatalogItem Name="Bug Count" Type="2" /> 
     <CatalogItem Name="Bug History Chart" Type="2" /> 
     <CatalogItem Name="Bug Priority Chart" Type="2" /> 
    </CatalogItem> 
    <CatalogItem Name="Impediment Report" Type="2" /> 
    <CatalogItem Name="Product Backlog Composition" Type="2" /> 
    <CatalogItem Name="Product Burndown Chart" Type="2" /> 
    <CatalogItem Name="Product Cumulative Flow" Type="2" /> 
    <CatalogItem Name="Retrospective Report" Type="2" /> 

壞消息是,我不知道,如果你能做到這一點不添加「ReportTree」功能到您的ReportServer。所以,這取決於您對該服務器的訪問權限。您可能能夠使用跨數據庫的功能,但我沒有嘗試過。

+0

Darrel, 這是理想的,非常感謝。 我碰巧是DBA,所以我開始創建函數,運行腳本,然後刪除函數,這樣就沒有問題了! Jonathan – Fatherjack 2009-06-22 08:51:29