ReportServerデータベースに対するクエリに慣れてレポートのリストを見つけることができますが、親子レポート、または子レポート。SQL Server ReportServerをクエリして親子の子レポートを見つける方法
リンクをユーザーがクリックすると、第二子の.rdlが実行された:私は、その出力はこのようなものですSSRSレポートを持っています。
子を含むレポートのリンクを識別するために実行できるクエリが必要です。
ReportServerデータベースに対するクエリに慣れてレポートのリストを見つけることができますが、親子レポート、または子レポート。SQL Server ReportServerをクエリして親子の子レポートを見つける方法
リンクをユーザーがクリックすると、第二子の.rdlが実行された:私は、その出力はこのようなものですSSRSレポートを持っています。
子を含むレポートのリンクを識別するために実行できるクエリが必要です。
非常に興味深い質問です。 ReportServerデータベースを掘り下げたことで疑いがないように、サーバー上の各オブジェクトは、ItemIDで一意に識別されるカタログテーブルの行で表されます。そして、間違いなくあなたが見つけたように、1つのカタログ項目と別のカタログ項目との間には関係がありません。したがって、レポートのドリルスルー/サブレポートを照会するための通常のSQL文を記述することはできません。
レポートでは、RDLの処理中にロードするサブレポートのみがわかります。したがって、ドリルスルー/サブレポートデータを取得するには、RDL(実際はXMLのみ)を調べる必要があります。これは、カタログ表の「コンテンツ」列に保管されます。
このSQLのビットを使用してください。
with xmlnamespaces ('http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition' as rdl),
CatalogData as (
select ItemID, [Path], [Name], Content, convert(xml, convert(varbinary(max), Content)) 'ContentXml'
from [Catalog]
where [Type] = 2)
select ItemID, [Path], [Name], ContentXml, s.value('rdl:ReportName[1]', 'nvarchar(256)')
from CatalogData
cross apply ContentXml.nodes('//rdl:Drillthrough') as Subreports(s);
注意すべきいくつかのポイント: