2010-08-09 48 views

回答

4

總之,沒有。沒有很好的解決方法。但是,對於開發,我通常創建一個測試查詢以及我在SSRS中的工作。我會在Management Studio中編輯它,然後將這些值粘貼回BIDS。假設名爲「StudentID」和「TeacherID」兩個參數,查詢看上去像:

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 

這讓我從下拉參數列表使用真實文本值,只是在我的查詢粘貼。然後,我可以在Management Studio中優化查詢,然後在對結果滿意時將其粘貼回BIDS。

+0

謝謝Aaron。如果用戶希望能夠輸入多個studentId,你將如何處理或測試多值參數?或者例如你有4個不同的學生叫做'John Doe'。 – DavidStein 2010-08-09 19:21:52

+0

我想說的是有一個巧妙的技巧,但我通常只是對它進行硬編碼,以確保它在我需要的少數實例中起作用。 SSRS執行文本替換而不是實際參數化,因此您可以在「WHERE StudentID IN(@StudentIDs)」位置實際輸出動態SQL,如「WHERE StudentID IN(65,66,67)」。我想你可以把你的文本包裝在sp_executesql中,但是你會失去語法高亮。像往常一樣,沒有很好的解決方案。 – 2010-08-09 20:42:30

7

您可以在SSRS報表服務器上運行類似下面的內容。您將能夠看到報表數據集正在執行的sql。

;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

當我運行報表並使用參數從查詢中拉出查詢時,通常會運行SQL事件探查器。

+0

運行時參數將包含在.rdl定義中,該運行時參數不包含運行SQL Profiler的特定狀態。 – barrypicker 2017-05-23 21:05:46

0

關閉文件,將擴展名從.rdlc更改爲.rdl並重新打開。它應該顯示爲HTML。現在做一個「選擇」的搜索,你去!

+0

運行時參數將包含在.rdl定義中。 – barrypicker 2017-05-23 21:04:25