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? p>
Y a-t-il un moyen d'entrer dans l'éditeur des offres pour voir cela? p>
4 Réponses :
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 à: 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. P> P>
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.
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
Mille upvotes !!!! J'étais aveugle et maintenant je vois ce qui fonctionne.
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. P>
Fermez le fichier, modifiez l'extension de .rdlc à .rdl et rouvrir. Il devrait afficher en HTML. Maintenant, faites une recherche sur "Select" et voilà! P>
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.