我有一个项目来更新SSRS实例上的所有报告,并且我认为我会在Excel中获得所有报告的列表,因此我可以在更新每个报告时勾选它们。我想的很容易。我经常不使用它(根本没有),但XML似乎适合这一点。我会有类似的东西:

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

Catalog表是我的数据源,它有ItemID和ParentID所以我可以识别对象及其层次结构,但是我无法以XML格式获取整个服务器,如果我指定了文件夹,我可以获取一个文件夹的内容(name或ItemID)但不是整个服务器。一旦我拿出WHERE ItemID = 1234行,我得到类似的东西:

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

我已经尝试过CTE的XML AUTO,XML EXPLICIT,现在我觉得我对XML的解除关系是合理的!

有没有办法以XML格式获得完整(最多4个级别)的层次结构?

这是与XML无关的东西吗?我错误地转向了死胡同?

有帮助吗?

解决方案

所以,好消息和坏消息。这是个好消息。

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 ParentID=@ItemId
   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。因此,这取决于您对该服务器的访问权限。您可能能够使该功能跨数据库工作,我没有尝试过。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top