Có cách nào đơn giản để xem các truy vấn SQL thực sự được tạo ra bởi SSRS khác hơn là chạy các dấu vết hồ sơ để nắm bắt chúng?Cách đơn giản để xem truy vấn SQL được tạo bởi báo cáo SSRS?
Có cách nào từ bên trong trình chỉnh sửa BIDS để xem không?
Có cách nào đơn giản để xem các truy vấn SQL thực sự được tạo ra bởi SSRS khác hơn là chạy các dấu vết hồ sơ để nắm bắt chúng?Cách đơn giản để xem truy vấn SQL được tạo bởi báo cáo SSRS?
Có cách nào từ bên trong trình chỉnh sửa BIDS để xem không?
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ả.
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
Đ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ố.
OP nói riêng mà không chạy SQL Profiler ... – barrypicker
Đó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!
thông số thời gian chạy sẽ được bao gồm trong định nghĩa .rdl. – barrypicker
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
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. –