[英]SQL Server - SSRS - Where to find query generating the report
使用 SSRS 创建所有报告的人已经离开,我正在尝试对正在生成的报告之一进行故障排除。 我如何获得查看生成报告的查询的权限。
这将给出带有 xml 报告定义的报告列表:
SELECT Name,
CAST(CAST(Content AS VARBINARY(MAX)) AS XML) AS ReportXML
FROM ReportServer.dbo.Catalog
where Type = 2
order by Name
您想要的信息位于 DataSets 部分,示例如下。 报告中可能有多个查询/存储过程。
<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>
.
.
.
请参阅http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition/ReportDefinition.xsd
作为 jim31415,他说它作为 XML 存储在 Catalog 表中的数据。 您可以使用游标查询此数据并从每个 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
在报告中单击。
在工具栏中选择“查看”。
选择“报告数据”或 CTL+ALT+D
在报告数据面板中,您应该会看到数据集。
右键单击数据集,然后选择“查询”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.