Sql 嵌套文件夹内容的XML
我有一个项目要更新SSRS实例上的所有报告,我想我会将所有报告的列表输入Excel,这样我可以在更新每个报告时勾选它们。我想很简单。我一点也不经常使用它,但XML似乎适合于此。我想要的是:Sql 嵌套文件夹内容的XML,sql,xml,hierarchy,Sql,Xml,Hierarchy,我有一个项目要更新SSRS实例上的所有报告,我想我会将所有报告的列表输入Excel,这样我可以在更新每个报告时勾选它们。我想很简单。我一点也不经常使用它,但XML似乎适合于此。我想要的是: <Server> <ReportFolder> <ReportFolder> <Report> </Report> <Report> </Report> &l
<Server>
<ReportFolder>
<ReportFolder>
<Report>
</Report>
<Report>
</Report>
</ReportFolder>
<Report>
</Report>
<Report>
</Report>
<Report>
</Report>
</ReportFolder>
<ReportFolder>
</ReportFolder>
</Server>
<Server>
<ReportFolder>
</ReportFolder>
<ReportFolder>
</ReportFolder>
<ReportFolder>
</ReportFolder>
<Report>
</Report>
<Report>
</Report>
<Report>
</Report>
<Report>
</Report>
<Report>
</Report>
</Server>
目录表是我的数据源,它有ItemID和ParentID,因此我可以识别对象及其层次结构,但我无法以XML形式获取完整的服务器,如果我指定文件夹名称或ItemID而不是整个服务器,我可以获取一个文件夹的内容。一旦我取出WHERE ItemID=1234行,我会得到如下结果:
<Server>
<ReportFolder>
<ReportFolder>
<Report>
</Report>
<Report>
</Report>
</ReportFolder>
<Report>
</Report>
<Report>
</Report>
<Report>
</Report>
</ReportFolder>
<ReportFolder>
</ReportFolder>
</Server>
<Server>
<ReportFolder>
</ReportFolder>
<ReportFolder>
</ReportFolder>
<ReportFolder>
</ReportFolder>
<Report>
</Report>
<Report>
</Report>
<Report>
</Report>
<Report>
</Report>
<Report>
</Report>
</Server>
我已经尝试过CTE的XML自动、XML显式,现在感觉到我与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中,是否可以做到这一点。因此,这取决于您对该服务器的访问。您可以让函数跨数据库工作,我没有尝试过。您有行的示例集吗?我目前没有SSRS设置,因此没有任何样本数据可供使用。我认为递归CTE可以很好地解决这个问题。Darrel,这很理想,非常感谢。我碰巧是DBA,所以我可以创建函数,运行脚本,然后删除函数,这样就没有问题了!乔纳森