WITH [catalog_xml] AS ( SELECT * , [report_folder] = CASE WHEN [Path] = '/' + [Name] THEN '' ELSE SUBSTRING([Path], 2, LEN([Path])-LEN([Name])-2) END , [ContentXml] = (CONVERT(XML, CONVERT(VARBINARY(MAX), [Content]))) FROM [dbo].[Catalog] WITH(NOLOCK) WHERE [Type] = 2 ) , [data_sources] AS ( SELECT [r].[ItemID] , [r].[LocalDataSourceName] , [DataProvider] = [r].[DataProvider] , [ConnectionString] = [r].[ConnectionString] FROM ( SELECT [c].* , [LocalDataSourceName] = [DataSourceXml].[value]('@Name', 'NVARCHAR(260)') , [DataProvider] = [DataSourceXml].[value]('(*:ConnectionProperties/*:DataProvider)[1]', 'NVARCHAR(260)') , [ConnectionString] = [DataSourceXml].[value]('(*:ConnectionProperties/*:ConnectString)[1]', 'NVARCHAR(MAX)') FROM [catalog_xml] AS [c] CROSS APPLY [ContentXml].[nodes]('/*:Report/*:DataSources/*:DataSource') AS [DataSource]([DataSourceXml]) WHERE [c].[Type] = 2 -- limit to reports only ) AS [r] ) , [datasets] AS ( SELECT [ItemID] , [DataSetName] = [QueryXml].[value]('@Name', 'NVARCHAR(256)') , [DataSourceName] = [QueryXml].[value]('(*:Query/*:DataSourceName)[1]', 'NVARCHAR(260)') , [CommandType] = [QueryXml].[value]('(*:Query/*:CommandType)[1]', 'NVARCHAR(15)') , [CommandText] = [QueryXml].[value]('(*:Query/*:CommandText)[1]', 'NVARCHAR(MAX)') , [report_folder] FROM [catalog_xml] CROSS APPLY [ContentXml].[nodes]('/*:Report/*:DataSets/*:DataSet') AS [QueryData]([QueryXml]) ) SELECT [Name] , [Path] , [LocalDataSourceName] , [DataSetName] , [CommandType] = ISNULL([CommandType], 'Text') , [CommandText] FROM [datasets] AS [ds] INNER JOIN [data_sources] AS [src] ON [src].[ItemID] = [ds].[ItemID] AND [src].[LocalDataSourceName] = [ds].[DataSourceName] INNER JOIN [dbo].[Catalog] AS [c] WITH(NOLOCK) ON [ds].[ItemID] = [c].[ItemID] WHERE 1=1 --AND ds.[report_folder] NOT IN('Analytics') ORDER BY [Path];