我有一个项目来更新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无关的东西吗?我错误地转向了死胡同?
答案 0 :(得分: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 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中,我不确定是否可以这样做。因此,这取决于您对该服务器的访问权限。您可能能够使该功能跨数据库工作,我没有尝试过。