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 trữ để cho phép bạn lọc tập kết quả trực tiếp nhưng tôi giả sử vì một số lý do mà bạn không thể thực hiện việc này.
Những gì bạn cần làm sau đó là lưu trữ các kết quả của thủ tục được lưu trữ trong một bảng / bảng tạm thời như sau:
DECLARE @tablevar table(col1,..
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc'
CHỈNH SỬA:Nếu bạn có thể chỉnh sửa truy vấn con:
Proc được lưu trữ cũ:... SELECT * FROMMyTableWHERECol1 =@ param1 ANDCol2 =@ param2
Proc được lưu trữ mới:
....
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 đầy đủ về proc được lưu trữ của bạn ở đây. 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ể hơi phức tạp nhưng nếu nó phù hợp với bạn thì hãy sử dụng nó, nhưng tôi gặp khó khăn khi hình dung tình huống mà bạn không thể sửa đổi proc đã lưu trữ của mình thành sử dụng truy vấn phụ thay vì bảng tạm thời.