SQL Server - SSRS - Where to find query generating the report
Asked Answered
F

3

22

The guy who created all the reporting using SSRS has left, and I am trying to troubleshoot one of the reports being generated. How do I get access to look at the query that is generating the report.

Fumy answered 18/2, 2011 at 17:31 Comment(0)
V
27

This will give a listing of the reports with their xml report definition:

SELECT Name,
CAST(CAST(Content AS VARBINARY(MAX)) AS XML) AS ReportXML
FROM ReportServer.dbo.Catalog
where Type = 2
order by Name

The info you want is in the DataSets section, example below. There may be more than one query / stored procedure in the report.

<DataSets>
    <DataSet Name="SalesSummary">
        <Query>
            <CommandType>StoredProcedure</CommandType>
            <CommandText>rptSalesSummary</CommandText>
            <QueryParameters>
                <QueryParameter Name="@STARTDATE">
                    <Value>=Parameters!STARTDATE.Value</Value>
                </QueryParameter>
                <QueryParameter Name="@ENDDATE">
                    <Value>=Parameters!ENDDATE.Value</Value>
                </QueryParameter>
            </QueryParameters>
            <DataSourceName>SampleDB</DataSourceName>
        </Query>
        .
        .
        .
   </DataSet>
    <DataSet Name="CompanyLocation">
        <Query>
            <DataSourceName>SampleDB</DataSourceName>
            <CommandText>
                SELECT CompanyLocationID AS ID, Name 
                                    FROM tblCompanyLocation
                WHERE WareHouseOnlyInd = 0
                ORDER BY Description
            </CommandText>
            <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
        </Query>
    </DataSet>
    .
    .
    .

See http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition/ReportDefinition.xsd

Villainage answered 18/2, 2011 at 17:50 Comment(1)
Exactly what I wanted! Thanks!Fumy
G
2

As jim31415 he said the data it's stored in Catalog table as XML. You can query this data with a cursor and select the data from each XML:

DECLARE @details AS TABLE
    (
        id INT IDENTITY(1,1) NOT NULL,
        Report              NVARCHAR(100), 
        ReportPath          NVARCHAR(500),
        DataSetName         NVARCHAR(50), 
        DataSourceName      NVARCHAR(100), 
        ComandType          NVARCHAR(50), 
        CommandText         NVARCHAR(MAX)
    )

DECLARE @report xml
DECLARE @reportname NVARCHAR(100), @reportpath NVARCHAR(500)
DECLARE @query NVARCHAR(MAX)
DECLARE db_cursor CURSOR FOR 
        SELECT Name, Path ,CAST(cast(Content AS varbinary(max)) as XML)
        FROM Catalog
        WHERE Type = 2
        ORDER BY Name
OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @reportname, @reportpath, @report
WHILE @@FETCH_STATUS = 0
    BEGIN
        INSERT INTO @details
        SELECT 
            @reportname AS Report,
            @reportpath,
            t.c.value('@Name[1]', 'nvarchar(50)') AS DataSetName, 
            t.c.value('(./*:Query/*:DataSourceName)[1]', 'nvarchar(50)') AS DataSourceName, 
            t.c.value('(./*:Query/*:CommandType)[1]', 'nvarchar(100)') AS CommandType, 
            ISNULL(t.c.value('(./*:Query/*:CommandText)[1]', 'nvarchar(MAX)'), 'Shared - ' + t.c.value('(./*:SharedDataSet/*:SharedDataSetReference)[1]', 'nvarchar(MAX)'))  AS CommandText
        FROM 
            @report.nodes('/*:Report/*:DataSets/*:DataSet') AS t(c)
        FETCH NEXT FROM db_cursor INTO @reportname, @reportpath, @report
    END
CLOSE db_cursor
DEALLOCATE db_cursor


SELECT * FROM @details ORDER BY Report, DataSetName
Galicia answered 21/8, 2020 at 8:6 Comment(0)
P
0

Click in the report.

In the toolbar select 'View'.

Select 'Report Data' or CTL+ALT+D

In the report data panel you should see the data sets.

Right click the data sets, and select 'query'.

Photovoltaic answered 19/5, 2020 at 12:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.