2013-06-04 16 views

Odpowiedz

4

Istnieje kilka sposobów rozwiązania tego problemu. Najłatwiej byłoby zmodyfikować procedurę przechowywaną, aby umożliwić filtrowanie zestawu wyników bezpośrednio, ale zakładam, że z jakiegoś powodu nie możesz tego zrobić.

Co musisz zrobić potem jest przechowywanie wyników procedury przechowywanej w stół/Temp tak:

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

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

EDIT: Jeśli można edytować podzapytania:

Stary przechowywane Proc: ... SELECT * OD MojaTabela GDZIE Col1 = @ param1 I Col2 = @ param2

New Przechowywane Proc:

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

ale może ja nie rozumiejąc swoją przechowywanej proc tutaj całkowicie. Tabela tymczasowa nie jest tak naprawdę najbardziej wydajnym rozwiązaniem i może być nieco kłopotliwa, ale jeśli działa dla ciebie, to idź z nią, ale mam problem z wizualizacją sytuacji, w której nie można po prostu zmodyfikować zapisanego procesu do użyj kwerendy podrzędnej zamiast tabeli tymczasowej.

+1

I zdecydowałem się przechowywać zestaw wyników w tabeli temp w SP, a następnie zapytanie do wspomnianej tabeli temp.. – Ozzyberto

+0

Cieszę się, że to rozwiązanie zadziałało. Jeśli jesteś w stanie zaktualizować przechowywany proc, prawdopodobnie istnieje lepszy sposób na przeprojektowanie przechowywanego procesu bez konieczności używania tabeli tymczasowej, ale może to być bardziej kłopotliwe niż jest warte. –

Powiązane problemy