Tôi đang cố gắng tạo một báo cáo SSRS mới sẽ trả về và hiển thị các giá trị của một thủ tục lưu sẵn SQL Server. Tôi sẽ chuyển một tham số @clientID
đến thủ tục được lưu trữ. Tham số này được sử dụng trong 3 câu lệnh BEGIN
/END
khác nhau. Mỗi câu lệnh BEGIN
`END` lấy tham số và tạo truy vấn, trả về dữ liệu cụ thể.SSRS - trả về nhiều truy vấn trong một thủ tục đã lưu
Khi tôi tạo báo cáo SSRS, tôi trỏ nguồn dữ liệu đến quy trình được lưu trữ này, nhưng chỉ kết quả được đặt từ câu lệnh BEGIN
/END
đầu tiên được trả về. Nếu tôi chạy thủ tục lưu sẵn trong SSMS, tôi nhận được 3 tập kết quả khác nhau, như mong đợi.
Làm cách nào để có được các kết quả 3 BEGIN
/END
này thành một báo cáo?
Mẫu mã:
CREATE PROCEDURE pClientData (@clientID varchar(30))
AS
DECLARE @Orders table (
...
);
DECLARE @Results table (
...
);
DECLARE @Status table (
...
);
BEGIN
SET NOCOUNT ON;
-- Get all the orders by client
INSERT INTO @Orders
SELECT ...
-- Return the results --
SELECT *
FROM @Orders;
END
BEGIN
SET NOCOUNT ON;
-- Determine the Results
INSERT INTO @Results
SELECT ...
SELECT *
FROM @Results;
END
BEGIN
SET NOCOUNT ON;
SET @Status = (
SELECT ...
);
SELECT @Status as Status;
END
GO
gọi Query từ SSRS:
EXEC pClientData @clientID
Cảm ơn bạn đã liên kết. Tôi tin bạn - nhưng bạn không nghĩ đó là một cách không hiệu quả để truy vấn? Thay vì tính toán một cái gì đó một lần và sử dụng nó 3 nơi, tôi biết phải tính toán nó 3 lần riêng biệt? Lame ... – mikebmassey
@mikebmassey Tôi đồng ý, đó là một điều mà tôi đã phải làm trong quá khứ khi tính toán rất tốn kém ...Tôi có thủ tục lưu trữ đầu tiên thực hiện phép tính và lưu kết quả vào một bảng (không tạm thời) trước khi trả về kết quả của nó, và sau đó có các thủ tục được lưu trữ sau đây tham chiếu đến bảng đã được điền bởi lệnh gọi đầu tiên ... Tất nhiên, điều này có thể khó khăn hơn tùy thuộc vào bao nhiêu phiên bản khác nhau của dữ liệu tồn tại/đồng thời/etc ... –
Tôi không nghĩ đến việc sử dụng bảng tạm thời. Vì vậy, '#' sẽ sống, nhưng không phải '@' từ truy vấn đến truy vấn? – mikebmassey