2009-06-19 79 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