2013-06-04 30 views

Trả lời

4

Có một số cách để giải quyết vấn đề này. Cách dễ nhất là sửa đổi thủ tục lưu sẵn để cho phép bạn lọc trực tiếp tập hợp kết quả nhưng tôi giả sử vì một số lý do bạn không thể thực hiện điều này.

Những gì bạn sẽ cần phải làm sau đó là lưu trữ các kết quả của các thủ tục lưu trữ trong một bảng/bảng temp như vậy:

DECLARE @tablevar table(col1,.. 
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2' 

SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc' 

EDIT: Nếu bạn có thể chỉnh sửa các subquery:

Cũ Stored Proc: ... CHỌN * TỪ MyTable ĐÂU col1 = @ param1 VÀ col2 = @ param2

New Stored Proc:

.... 
SELECT 
* 
FROM 
    (SELECT 
     * 
    FROM 
     MyTable 
    WHERE 
     Col1 = @param1 AND 
     Col2 = @param2 
    ) a 
WHERE 
    Col3 = FilterRule1 

nhưng có lẽ tôi không hiểu proc lưu trữ của bạn ở đây hoàn toàn. Một bảng tạm thời ở đây không thực sự là giải pháp hiệu quả nhất và có thể là một rắc rối nhưng nếu nó hoạt động cho bạn thì hãy đi với nó, nhưng tôi đang gặp khó khăn trong việc hình dung một tình huống mà bạn không thể sửa đổi sử dụng truy vấn phụ thay vì bảng tạm thời.

+1

Tôi đã chọn lưu trữ tập kết quả trong bảng tạm thời trong SP và sau đó truy vấn bảng tạm thời đã cho biết. – Ozzyberto

+0

Tôi rất vui vì giải pháp đã làm việc cho bạn. Nếu bạn có thể cập nhật các proc được lưu trữ có lẽ là một cách tốt hơn để thiết kế lại proc lưu trữ của bạn mà không cần phải sử dụng một bảng tạm thời, nhưng điều đó có thể rắc rối hơn nó có giá trị. –

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