10
votes

Un moyen simple de voir la requête SQL (IES) générée par les rapports SSRS?

Y a-t-il un moyen simple d'afficher les requêtes SQL en réalité générées par les SSR autres que de faire fonctionner des traces de profil pour les capturer?

Y a-t-il un moyen d'entrer dans l'éditeur des offres pour voir cela?


0 commentaires

4 Réponses :


4
votes

En bref, non. Il n'y a pas de bonne solution de contournement. Cependant, pour le développement, j'ai généralement créé une requête de test aux côtés de mon travail en SSR. Je voudrais éditer ce studio de gestion à l'intérieur puis consécuser les valeurs dans les offres. En supposant que deux paramètres nommés «étudiantsid» et «enseignant», la requête ressemblait à: xxx

Cela m'a permis d'utiliser des valeurs de texte réelles dans les listes de paramètres déroulants et simplement de coller dans ma requête. Ensuite, je pourrais optimiser la requête en studio de gestion, puis le coller dans les offres lorsque j'étais satisfait du résultat.


2 commentaires

Merci Aaron. Comment géreriez-vous ou testeriez-vous un paramètre multi-valeur si l'utilisateur souhaitait pouvoir entrer plusieurs étudiantsids? Ou par exemple, vous avez eu 4 étudiants différents nommés «John Doe».


J'aimerais dire qu'il y avait une astuce soignée, mais je ne fais généralement que du savoir pour m'assurer que cela fonctionne dans les rares instances dont j'avais besoin. Les SSRS effectuent un remplacement de texte au lieu d'un paramétrage réel afin que vous auriez, où vous auriez "où StudentID in (@studentids)" il produira en réalité une SQL dynamique comme "où StudentID in (65, 66, 67)". Je suppose que vous pourriez envelopper votre texte à l'intérieur d'un sp_executesql, mais vous perdez la sélection de la syntaxe. Comme d'habitude, il n'y a pas de grande solution.



8
votes

Vous pouvez exécuter quelque chose comme celui ci-dessous contre votre serveur de rapports SSRS. Vous serez en mesure de voir le SQL qui est en cours d'exécution par les jeux de données du rapport.

;WITH XMLNAMESPACES (
    DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition',
    'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner' AS rd
),
ReportData AS
(
    SELECT name ReportName
           , x.value('CommandType[1]', 'VARCHAR(50)') AS CommandType
           , x.value('CommandText[1]','VARCHAR(8000)') AS CommandText
           , x.value('DataSourceName[1]','VARCHAR(50)') AS DataSource
    FROM (SELECT  name
                  , CAST(CAST(content AS VARBINARY(MAX)) AS XML) AS reportXML
            FROM  ReportServer.dbo.Catalog
            WHERE content IS NOT NULL
                  AND type != 3) a
                  CROSS APPLY reportXML.nodes('/Report/DataSets/DataSet/Query') r(x)
)

SELECT *
FROM ReportData


1 commentaires

Mille upvotes !!!! J'étais aveugle et maintenant je vois ce qui fonctionne.



3
votes

Ce que je fais normalement, c'est exécuter SQL Profiler lorsque je passe le rapport et retirez la requête avec les paramètres.


0 commentaires

0
votes

Fermez le fichier, modifiez l'extension de .rdlc à .rdl et rouvrir. Il devrait afficher en HTML. Maintenant, faites une recherche sur "Select" et voilà!


2 commentaires

Les paramètres d'exécution seront inclus dans la définition .rdl.


Cela le rendra XML non html, du moins dans les versions plus récentes.