2012-04-12 23 views
5

Tôi có một thủ tục lưu trữ trả về hai lựa chọn, mà tôi sử dụng trong báo cáo. Các lựa chọn đầu tiên là dữ liệu để hiển thị trong định dạng bảng và lần thứ hai được siêu dữ liệu để hiển thị ở đầu báo cáo, như thể hiện dưới đây:Cách chọn [temp table1] = [subselect 1], [temp table2] = [subselect 2] FROM [Stored Procedure]

CREATE PROCEDURE dbo. GetReport  
@Input INT 
AS 
BEGIN   
    --Get #Metadata  
    -- #Results = f(#Metadata) … compex calculation   
    SELECT * FROM #Results  
    SELECT * FROM #Metadata  
END 

Khi tính sproc là khá tích cực, tôi muốn chuẩn bị các dòng báo cáo dưới dạng dữ liệu đơn giản (trong hai bảng: PrecalcResults và PrecalcMetadata) cho một số thông số sproc chủ yếu được sử dụng qua đêm. Lather Tôi sẽ trực tiếp chọn các vau được tính toán trước hoặc tính toán chúng với sproc theo các tham số.

Vì lý do bảo trì Tôi muốn sử dụng sproc cùng để tính toán dữ liệu đó sẽ là: 1. cho thấy trong báo cáo 2. được lưu trữ trong PrecalcResults và PrecalcMetadata (với các thông số được sử dụng)

Nếu tôi sẽ có một lựa chọn sproc tôi sẽ là một cách tiếp cận desctibed ở đây: Insert results of a stored procedure into a temporary table

Như tôi có multiselect sproc tôi muốn làm một cái gì đó như ở trên nhưng với hai bảng. Trong .net Tôi sẽ làm DataSet.Tables [0] và DataSet.Tables [1] ..., nhưng tôi muốn làm điều đó trong tsql, để chạy nó trong công việc hàng ngày.

Điều này có thể thực hiện được trong MS SQL không?


Tôi phải xin lỗi bản thân mình, từ câu trả lời dưới đây tôi có thể thấy tôi không rõ ràng. Tôi muốn thực hiện chức năng này như TSQL tinh khiết.

+0

Thử tìm kiếm "nhiều recordsets tích cực" (hay còn gọi là MARS). Bạn sẽ cần sử dụng phương thức 'NextRecordset' để di chuyển từ một bản ghi này sang bản ghi tiếp theo. – HABO

Trả lời

2

Có, điều này là có thể.

It's perfectly fine to return multiple result sets from a single stored procedure as you have suggested.

vấn đề tiềm năng duy nhất của bạn là giới hạn của một TableAdapter việc có thể để kéo cả nhóm kết quả từ các thủ tục lưu trữ, but there's a very simple work-around for that issue.

+0

trừ khi nó là một bảng tạm thời, sau đó nó sẽ không được tìm thấy bởi vì nó chỉ tồn tại trên máy chủ – Taryn

+0

@ bluefeet Đó không phải là trải nghiệm của tôi ... đó có thể là vấn đề với lớp truy cập dữ liệu của bạn hoặc cố gắng tham chiếu tạm thời bảng trên một kết nối riêng biệt ... Nó phải được vô hình cho khách hàng hay không nguồn cho một tuyên bố chọn là một bảng tạm thời hoặc không tạm thời. –

+0

Cũng phụ thuộc vào cách bạn đang sử dụng nó, nếu bạn có một bảng tạm thời trả về dữ liệu trong một proc được lưu trữ và bạn thêm thủ tục được lưu trữ vào tệp DataSet.xsd. Kinh nghiệm của tôi là nó không phải là nhận thức của bảng tạm thời tại thời điểm đó vì nó tồn tại trên máy chủ chỉ – Taryn

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