The below will place the XML into a table so you can use it to filter what you are after.
CREATE TABLE [dbo].[ReportContents]( [CatalogItemID] [uniqueidentifier] NOT NULL, [Type] [int] NOT NULL, [Path] [nvarchar](425) NOT NULL, [Name] [nvarchar](425) NOT NULL, [ItemContent] [xml] NULL ) ON [PRIMARY] INSERT INTO ReportContents (CatalogItemID, [Type], [Path], [Name], ItemContent) SELECT ItemID , [Type] , [Path] , [Name] , cast(CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(MAX), [Content])) as xml) As [ItemContent] FROM ReportServer.dbo.Catalog WHERE [Type] <> 1 --Folder AND [Type] <> 3 --Image
The below queries the table you created, adjusting the value of the @SQLToCheckFor variable will adjust which text to look for within the SQL Datasets of the SSRS XML. Note this is set up for SQL2008, from memory its just a change of the http address from 2008 to 2005 etc.
--Check all the reports to find a bit of SQL Declare @SQLToCheckFor varchar(500) = 'FACTMemberBalance'--'dPlanClassification' --Enter your bit of SQL here select MydataSets.CatalogItemID, MydataSets.ReportName , MyDataSets.DataSetName, MydataSets.CommandText, MydataSets.ReportPath from ( select CatalogItemID, [Name] As ReportName, [path] as ReportPath ,nref.value('@Name', 'nvarchar(255)' ) As DataSetName ,nref.query('.') As DataSetXML ,nref.value('declare namespace p1="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"; (./p1:Query[1]/p1:CommandText)[1]', 'varchar(max)') As CommandText ,nref.value('declare namespace p3="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"; declare namespace p1="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"; declare default element namespace "http://schemas.microsoft.com/AnalysisServices/QueryDefinition"; (./p1:Query/p3:MdxQuery/QueryDefinition/QuerySpecification/From)[1]', 'varchar(max)') As Cube from ReportContents cross apply ItemContent.nodes('declare default element namespace "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"; declare namespace p1="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"; //DataSet') as R(nref) --A filter can be added here to limit what reports you are looking through )MyDataSets where CommandText like '%' + @SQLToCheckFor + '%'
No comments:
Post a Comment