如何找出 SSRS 报告使用的所有表名和列列表
How to find out All tables names & columns list use by SSRS Report
我将 600 个 SSRS 报告部署到生产环境中。如何获取报告的元数据信息?诸如哪些报告使用哪些 table 之类的事情。如果任何报告使用超过 1 个 table,我将尝试获取报告使用的所有 table。
是否可以获得这样的信息?请帮助我
您可以操纵 ReportServer.dbo.Catalog 中的数据以提取每个 RDL 的 XML。然后,如果您所有的 table 都以模式名称开头,您可以对 XML(或 XML 中的数据集查询)执行正则表达式以提取 table 名称.它可能会变得混乱。如果你不使用两部分或三部分的 table 名称(Database.schema.table 或 schema.table),这可能很难编写正则表达式。也许有一种工具可以从原始查询中提取 table 名称?在这种情况下,您可以毫不费力地从目录 table 中提取查询。
现在在移动设备上,但如果您认为它有帮助,我可以提供目录 table 提取查询(我在生产中使用它来搜索 table 名称...而不是提取所有 table 个名字)。
我必须将“http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition”位更改为您的 SSRS 所在的适当年份,否则您会得到 0 行结果。
WITH XMLNAMESPACES ( DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition', 'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner' AS rd )
SELECT ReportName = name
,DataSetName = x.value('(@Name)[1]', 'VARCHAR(250)')
,DataSourceName = x.value('(Query/DataSourceName)[1]','VARCHAR(250)')
,CommandText = x.value('(Query/CommandText)[1]','VARCHAR(250)')
,Fields = df.value('(@Name)[1]','VARCHAR(250)')
,DataField = df.value('(DataField)[1]','VARCHAR(250)')
,DataType = df.value('(rd:TypeName)[1]','VARCHAR(250)')
--,ConnectionString = x.value('(ConnectionProperties/ConnectString)[1]','VARCHAR(250)')
FROM ( SELECT C.Name,CONVERT(XML,CONVERT(VARBINARY(MAX),C.Content)) AS reportXML
FROM ReportServer.dbo.Catalog C
WHERE C.Content is not null
AND C.Type = 2
) a
CROSS APPLY reportXML.nodes('/Report/DataSets/DataSet') r ( x )
CROSS APPLY x.nodes('Fields/Field') f(df)
ORDER BY name
我将 600 个 SSRS 报告部署到生产环境中。如何获取报告的元数据信息?诸如哪些报告使用哪些 table 之类的事情。如果任何报告使用超过 1 个 table,我将尝试获取报告使用的所有 table。
是否可以获得这样的信息?请帮助我
您可以操纵 ReportServer.dbo.Catalog 中的数据以提取每个 RDL 的 XML。然后,如果您所有的 table 都以模式名称开头,您可以对 XML(或 XML 中的数据集查询)执行正则表达式以提取 table 名称.它可能会变得混乱。如果你不使用两部分或三部分的 table 名称(Database.schema.table 或 schema.table),这可能很难编写正则表达式。也许有一种工具可以从原始查询中提取 table 名称?在这种情况下,您可以毫不费力地从目录 table 中提取查询。
现在在移动设备上,但如果您认为它有帮助,我可以提供目录 table 提取查询(我在生产中使用它来搜索 table 名称...而不是提取所有 table 个名字)。
我必须将“http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition”位更改为您的 SSRS 所在的适当年份,否则您会得到 0 行结果。
WITH XMLNAMESPACES ( DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition', 'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner' AS rd )
SELECT ReportName = name
,DataSetName = x.value('(@Name)[1]', 'VARCHAR(250)')
,DataSourceName = x.value('(Query/DataSourceName)[1]','VARCHAR(250)')
,CommandText = x.value('(Query/CommandText)[1]','VARCHAR(250)')
,Fields = df.value('(@Name)[1]','VARCHAR(250)')
,DataField = df.value('(DataField)[1]','VARCHAR(250)')
,DataType = df.value('(rd:TypeName)[1]','VARCHAR(250)')
--,ConnectionString = x.value('(ConnectionProperties/ConnectString)[1]','VARCHAR(250)')
FROM ( SELECT C.Name,CONVERT(XML,CONVERT(VARBINARY(MAX),C.Content)) AS reportXML
FROM ReportServer.dbo.Catalog C
WHERE C.Content is not null
AND C.Type = 2
) a
CROSS APPLY reportXML.nodes('/Report/DataSets/DataSet') r ( x )
CROSS APPLY x.nodes('Fields/Field') f(df)
ORDER BY name