2010-08-09 4 views

Répondre

4

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 à côté de mon travail dans SSRS. Je modifierais ceci dans Management Studio, puis je collerais les valeurs dans BIDS. En supposant deux paramètres nommés « StudentID » et « TeacherID », la requête ressemblait à:

DECLARE @StudentID int 
DECLARE @TeacherID int 

SELECT @StudentID = StudentID FROM Students WHERE StudentName LIKE 'John Doe' 
SELECT @TeacherID = TeacherID FROM Teachers WHERE TeacherName LIKE 'Mr. Jones' 

-- PASTE IN QUERY FROM BIDS BELOW 

Cela m'a permis d'utiliser des valeurs réelles de texte à partir des listes de paramètres déroulantes et simplement coller dans ma requête. Ensuite, j'ai pu optimiser la requête dans Management Studio, puis la coller dans BIDS lorsque j'étais satisfait du résultat.

+0

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

+0

Je voudrais dire qu'il y avait une astuce, mais je le code en dur pour s'assurer que cela fonctionne dans les quelques cas où j'en avais besoin. SSRS effectue un remplacement de texte au lieu d'un paramétrage réel. Ainsi, si vous avez "WHERE StudentID IN (@StudentIDs)", il affichera un SQL dynamique comme "WHERE StudentID IN (65, 66, 67)". Je suppose que vous pouvez envelopper votre texte dans un sp_executesql mais vous perdez la coloration syntaxique. Comme d'habitude, il n'y a pas de bonne solution. –

7

Vous pouvez exécuter quelque chose comme le suivant sur votre serveur de rapports SSRS. Vous serez en mesure de voir le SQL qui est en cours d'exécution par les ensembles 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 
3

Ce que je normalement faire est de lancer SQL Profiler lorsque je lance le rapport et tirer la requête sur avec les paramètres.

+0

L'OP indique spécifiquement sans exécuter SQL Profiler ... – barrypicker

0

Fermez le fichier, remplacez l'extension .rdlc par .rdl et rouvrez-la. Il devrait afficher en HTML. Maintenant, faites une recherche pour "select" et voilà!

+0

les paramètres d'exécution seront inclus dans la définition .rdl. – barrypicker