0
私は、レポートサーバー上にあるすべてのレポートについて、SQL Server 2014を使用してSSRSレポートを作成しています。私はそれをするのに役立つコードをオンラインで見つけました。レポートサーバーのレポートに関するSSRSレポートの作成
コードは次のとおりです。
BEGIN TRY
DROP TABLE #ReportList
END TRY
BEGIN CATCH
END CATCH
BEGIN TRY
DROP TABLE #ReportParameters
END TRY
BEGIN CATCH
END CATCH
BEGIN TRY
DROP TABLE #ReportFields
END TRY
BEGIN CATCH
END CATCH
SELECT
Name
,Path
INTO #ReportList
FROM ReportServer.dbo.Catalog
WHERE Content IS NOT NULL
ORDER BY Name;
SELECT DISTINCT Name as ReportName
,ParameterName = Paravalue.value('Name[1]', 'VARCHAR(250)')
,ParameterType = Paravalue.value('Type[1]', 'VARCHAR(250)')
,ISNullable = Paravalue.value('Nullable[1]', 'VARCHAR(250)')
,ISAllowBlank = Paravalue.value('AllowBlank[1]', 'VARCHAR(250)')
,ISMultiValue = Paravalue.value('MultiValue[1]', 'VARCHAR(250)')
,ISUsedInQuery = Paravalue.value('UsedInQuery[1]', 'VARCHAR(250)')
,ParameterPrompt = Paravalue.value('Prompt[1]', 'VARCHAR(250)')
,DynamicPrompt = Paravalue.value('DynamicPrompt[1]', 'VARCHAR(250)')
,PromptUser = Paravalue.value('PromptUser[1]', 'VARCHAR(250)')
,State = Paravalue.value('State[1]', 'VARCHAR(250)')
INTO #ReportParameters
FROM (
SELECT top 1000 C.Name,CONVERT(XML,C.Parameter) AS ParameterXML
FROM ReportServer.dbo.Catalog C
WHERE C.Content is not null
AND C.Type = 2
) a
CROSS APPLY ParameterXML.nodes('//Parameters/Parameter') p (Paravalue)
ORDER BY ReportName,ParameterName;
WITH XMLNAMESPACES (DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition', 'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner' AS rd)
SELECT DISTINCT ReportName = name
,DataSetName = x.value('(@Name)[1]', 'VARCHAR(250)')
,DataSourceName = x.value('(Query/DataSourceName)[1]','VARCHAR(250)')
,CommandText = x.value('(Query/CommandText)[1]','VARCHAR(250)')
,Fields = df.value('(@Name)[1]','VARCHAR(250)')
,DataField = df.value('(DataField)[1]','VARCHAR(250)')
,DataType = df.value('(rd:TypeName)[1]','VARCHAR(250)')
,ConnectionString = x.value('(ConnectionProperties/ConnectString)[1]','VARCHAR(250)')
INTO #ReportFields
FROM (SELECT C.Name,CONVERT(XML,CONVERT(VARBINARY(MAX),C.Content)) AS reportXML
FROM ReportServer.dbo.Catalog C
WHERE C.Content is not null
AND C.Type = 2
) a
CROSS APPLY reportXML.nodes('/Report/DataSets/DataSet') r (x)
CROSS APPLY x.nodes('Fields/Field') f(df)
ORDER BY name
SELECT
a.Name AS ReportName
,a.Path
,SUBSTRING(a.Path,1,LEN(a.Path)-LEN(a.Name)) AS ReportFolder
,'http://msl-db12/Reports/Pages/Report.aspx?ItemPath='+REPLACE(SUBSTRING(a.Path,1,LEN(a.Path)-LEN(a.Name)),'/','%2f')+REPLACE(a.Name,' ','+') AS ReportLink
,'User Input' AS FieldType
,b.ParameterPrompt AS DataSetOrPromptName
,b.ParameterName AS FieldOrParameterName
FROM #ReportList a
LEFT OUTER JOIN #ReportParameters b ON a.Name = b.ReportName
WHERE b.ParameterName IS NOT NULL
UNION
SELECT
a.Name AS ReportName
,a.Path
,SUBSTRING(a.Path,1,LEN(a.Path)-LEN(a.Name)) AS ReportFolder
,'http://msl-db12/Reports/Pages/Report.aspx?ItemPath='+REPLACE(SUBSTRING(a.Path,1,LEN(a.Path)-LEN(a.Name)),'/','%2f')+REPLACE(a.Name,' ','+') AS ReportLink
,'Data Point' AS FieldType
,b.DataSetName AS DataSetOrPromptName
,b.Fields AS FieldOrParameterName
FROM #ReportList a
LEFT OUTER JOIN #ReportFields b ON a.Name = b.ReportName
WHERE b.Fields IS NOT NULL
ORDER BY Name,Path,FieldType,ParameterPrompt,ParameterName
このコードは素晴らしい仕事をし、私は私のレポートサーバー上のすべてのレポートについての素敵なレポートを得ました。
サブスクリプションテーブルに参加して各レポートのサブスクリプションの列を取得するにはどうすればよいですか?
は、私は、次のコードを追加しましたが、それはかなりの仕事をしませんでした::私は以下の提案の答えからコードを試みたが、それは走った後、私はエラーメッセージが表示されました
メッセージ208、レベル16、状態0、行77です。オブジェクト名 '#ReportParameters'が無効です。WITH XMLNAMESPACES (DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition', 'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner' AS rd) SELECT DISTINCT ReportName = name ,DataSetName = x.value('(@Name)[1]', 'VARCHAR(250)') ,DataSourceName = x.value('(Query/DataSourceName)[1]','VARCHAR(250)') ,CommandText = x.value('(Query/CommandText)[1]','VARCHAR(250)') ,Fields = df.value('(@Name)[1]','VARCHAR(250)') ,DataField = df.value('(DataField)[1]','VARCHAR(250)') ,DataType = df.value('(rd:TypeName)[1]','VARCHAR(250)') ,ConnectionString = x.value('(ConnectionProperties/ConnectString)[1]','VARCHAR(250)' -------------------------Added this section here. ,S.[OwnerID] ,S.[Description] ,S.LastStatus) -------------------------End of the section here. INTO #ReportFields FROM ( SELECT C.Name ,CONVERT(XML,CONVERT(VARBINARY(MAX),C.Content)) AS reportXML -------------------------Added this section here. ,S.[OwnerID] ,S.[Description] ,S.LastStatus -------------------------End of the section here. FROM [GEB_ReportServer].[dbo].[Catalog] C -------------------------And this section here. INNER JOIN [GEB_ReportServer].[dbo].[Subscriptions] S ON C.ItemID = S.Report_OID ------------------------- WHERE C.Content is not null AND C.Type = 2 ) a CROSS APPLY reportXML.nodes('/Report/DataSets/DataSet') r (x) CROSS APPLY x.nodes('Fields/Field') f(df) ORDER BY name
私は - INTO #ReportParametersのコメントを外しました。エラーなしで実行するレポートを取得しましたが、サブスクリプションテーブルからフィールドを取得しませんでした。
以下
完全なソリューションこれを実行し始め、レコードのリストを表示するために始めたとき、私はとても幸せでした。しかし、それが実行された後、私はエラーメッセージを受け取った:メッセージ208、レベル16、状態0、行77.無効なオブジェクト名 '#ReportParameters'。解決してもらえますか? >>>>あなたのコードは - INTO #ReportParameters行をコメントアウトしました.......私はコメントを外し、実行するレポートを得ました。それは解決策ですか? – user1777929
これが今働いているなら、それは解決策です。私は 'INTO#ReportParameters'をコメントアウトして、少なくとも私が投稿したものをテストすることができました。あなたが全体のコードセットでそれを必要とするなら、あなたは良いと思うはずです。 –
私はエラーを出すことなく動作しますが、サブスクリプションテーブルのフィールドは表示されません。そう、いいえ、実際には機能しません。私は本当にあなたの助けに感謝します。 – user1777929