Eine Google-Suche, um dieses Thema schnell gebracht up die folgenden blog post bereits identifiziert von der OP als nützlich und unten gezeigt (diese Abfrage selbst ist eigentlich eine Erweiterung der Arbeit mit LONGs Antwort unten verbunden)
SELECT TOP 1 ParValue
FROM (
SELECT els.TimeEnd
, IIF(CHARINDEX('&' + 'ParameterName' + '=', ParsString) = 0, 'ParameterName',
SUBSTRING(ParsString
, StartIndex
, CHARINDEX('&', ParsString, StartIndex) - StartIndex)) AS ParValue
FROM (SELECT ReportID, TimeEnd
, '&' + CONVERT(VARCHAR(MAX), Parameters) + '&' AS ParsString
, CHARINDEX('&' + 'ParameterName' + '=', '&' + CONVERT(VARCHAR(MAX), Parameters) + '&')
+ LEN('&' + 'ParameterName' + '=') AS StartIndex
FROM ExecutionLogStorage
WHERE UserName='UserName' -- e.g. DOMAIN\Joe_Smith
) AS els
INNER JOIN [Catalog] AS c ON c.ItemID = els.ReportID
WHERE c.Name = 'ReportName'
UNION ALL
SELECT CAST('2000-01-01' AS DateTime), 'ParameterName'
) i
ORDER BY TimeEnd DESC;
Beide Ansätze bieten uns jedoch nur einen Ausgangspunkt, da sie sich (auf verschiedene Weise) darauf verlassen, dass wir den Namen und die Parameternamen des Berichts im Voraus kennen. Wir können zwar schnell einige Änderungen an Ken Bowmans Arbeit vornehmen, um es gegen alle Ausführungen aller Berichte laufen zu lassen, aber wir haben immer noch das Problem, dass die Abfrage den Parameternamen fest codiert.
Die für die Ausführung eines Berichts erforderlichen Parameter werden in der Tabelle Catalog in der Spalte Parameter gespeichert. Obwohl die Spalte den Datentyp ntext hat, speichert sie tatsächlich eine XML-Zeichenfolge. an den Parameternamen Bedeutung können wir eine XPath Abfrage benutzen Sie
with
CatalogData as (
select ItemID, [Path], [Name], cast(Parameter as xml) 'ParameterXml'
from Catalog
where [Type] = 2),
ReportParameters as (
select ItemID, [Path], [Name], ParameterXml, p.value('Name[1]', 'nvarchar(256)') 'ParameterName'
from CatalogData
cross apply ParameterXml.nodes('/Parameters/Parameter') as Parameters(p))
select *
from ReportParameters;
diese Abfrage ausgeführt werden alle Berichte auf dem Server und deren Parameter aufzulisten. Jetzt müssen wir das nur mit Ken Bowmans Anfrage kombinieren. Ich habe
with
CatalogData as (
select ItemID, [Path], [Name], cast(Parameter as xml) 'ParameterXml'
from Catalog
where [Type] = 2),
ReportParameters as (
select ItemID, [Path], [Name], p.value('Name[1]', 'nvarchar(256)') 'ParameterName'
from CatalogData
cross apply ParameterXml.nodes('/Parameters/Parameter') as Parameters(p))
select
els.TimeEnd
, c.[Name]
, rp.ParameterName
, iif(
charindex(
'&' + rp.ParameterName + '=', ParametersString) = 0
, rp.ParameterName, substring(ParametersString
, StartIndex, charindex('&', ParametersString, StartIndex) - StartIndex
)) 'ParameterValue'
from (
select
ReportID
, TimeEnd
, rp.ParameterName
, '&' + convert(varchar(max), Parameters) + '&' 'ParametersString'
, charindex(
'&' + rp.ParameterName + '=',
'&' + convert(varchar(max), Parameters) + '&'
) + len('&' + rp.ParameterName + '=') 'StartIndex'
from
ExecutionLogStorage
inner join ReportParameters rp on rp.ItemID = ReportID) AS els
inner join [Catalog] c on c.ItemID = els.ReportID
inner join ReportParameters rp on rp.ItemID = c.ItemID and rp.ParameterName = els.ParameterName;
Hinweis mit einem WAK Ansatz gegangen, dass die Parameterwerte auf den Bericht als Teil einer URL übergeben werden, so dass Sie immer noch loswerden müssen erhalten die wörtliche Raum Codierung und so weiter. Auch dies funktioniert (noch) nicht für mehrwertige Parameter.
Dies setzt voraus, dass die Stored Procedures immer nur durch Reportausführung aufgerufen werden –
Hallo Long, danke für die Antwort, es ist sehr beschwerlich, alle Parameter ein zweites Mal neu aufzeichnen zu müssen, wenn sie schon gespeichert sind die ExecutionLogStorage-Tabelle, auch wenn sie nicht in dem am einfachsten zu verwendenden Format vorliegen. Ich habe auch viele viele gespeicherte Prozeduren, die ich diesen Beispielcode hinzufügen würde, zu dem beträchtliche Zeit benötigen würde. – PJD
Hoffe, das wird Ihnen in Ihrem Fall helfen: http://jegansubramaniam.blogspot.com/2012/02/ssrs-method-to-retrieve-last-run-report.html – LONG