2010-08-09 35 views

Trả lời

4

Tóm lại, không. Không có cách giải quyết tốt. Tuy nhiên, để phát triển tôi thường tạo ra một truy vấn thử nghiệm cùng với công việc của tôi trong SSRS. Tôi sẽ chỉnh sửa bên trong Management Studio và sau đó chỉ dán các giá trị trở lại vào BIDS. Giả sử hai tham số có tên là "StudentID" và "TeacherID", truy vấn trông giống như:

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 

Điều này cho phép tôi sử dụng các giá trị văn bản thực tế từ các danh sách tham số thả xuống và chỉ cần dán vào truy vấn của tôi. Sau đó, tôi có thể tối ưu hóa truy vấn trong Management Studio và sau đó dán nó trở lại vào BIDS khi tôi hài lòng với kết quả.

+0

Cảm ơn Aaron. Bạn sẽ xử lý hoặc kiểm tra thông số nhiều giá trị như thế nào nếu người dùng muốn có thể nhập nhiều studentId? Hoặc ví dụ bạn có 4 học sinh khác nhau có tên là 'John Doe'. – DavidStein

+0

Tôi muốn nói rằng có một thủ thuật gọn gàng, nhưng tôi thường chỉ mã hóa nó để đảm bảo nó hoạt động trong vài trường hợp mà tôi cần nó. SSRS thực hiện thay thế văn bản thay vì tham số thực tế để những nơi bạn có "WHERE StudentID IN (@StudentIDs)" nó sẽ thực sự tạo ra SQL động như "WHERE StudentID IN (65, 66, 67)". Tôi đoán bạn có thể bọc văn bản của bạn bên trong một sp_executesql nhưng sau đó bạn bị mất cú pháp tô sáng. Như thường lệ, không có giải pháp tuyệt vời. –

7

Bạn có thể chạy một cái gì đó giống như bên dưới với máy chủ báo cáo SSRS của mình. Bạn sẽ có thể thấy sql đang được thực thi bởi bộ dữ liệu báo cáo.

;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

Điều tôi thường làm là chạy SQL Profiler khi tôi chạy báo cáo và kéo truy vấn ra khỏi nó bằng các tham số.

+0

OP nói riêng mà không chạy SQL Profiler ... – barrypicker

0

Đóng tệp, thay đổi phần mở rộng từ .rdlc thành .rdl và mở lại. Nó sẽ hiển thị dưới dạng HTML. Bây giờ thực hiện tìm kiếm cho "chọn" và có bạn đi!

+0

thông số thời gian chạy sẽ được bao gồm trong định nghĩa .rdl. – barrypicker

Các vấn đề liên quan