2010-07-25 19 views
11

Załóżmy mam pewne procedury przechowywanej (i nie można go zmienić), która zwraca zestaw wyników:Unikać powrocie zestaw wyników z procedury przechowywanej

create procedure test_procedure 
as 
begin 

    select 1 

end 

wiem, że mogę wstawić wynik ustawiony na stole, więc byłoby to ukryte dla kodu wywołującego:

declare @t table(i int) 

insert into @t 
exec test_procedure 

Czy są jakieś inne sposoby na ukrycie powracającego zestawu wyników z kodu wywołującego?

Updated

Wygląda Byłem nieco mylące. Szukam tylko odpowiedzi T-SQL (nie te .NET).

+0

Jaki jest dokładnie problem z zwrócenie tego zestawu wyników? Zawsze możesz zignorować zestaw wyników i pozwolić, by garbage collector zajął się nim. –

+1

@Cylon Cat RE "pozwól, aby garbage collector to zrobił", tak nie jest. TDS jest protokołem przesyłania strumieniowego ... jeśli nie zostanie _read_ wynikiem, nie zostanie on koniecznie zwrócony klientowi. Nawet jeśli jego części są zwracane do klienta, prawdopodobnie będą obsługiwane w natywnym kodzie, chyba że odczytane z DataReader et al. –

+0

Cylon Cat: Co zrobić, jeśli nie mogę zignorować zestawu wyników? na przykład kod, który wywołuje moją procedurę, zakłada, że ​​nie zwraca się żadnego zestawu wyników. –

Odpowiedz

3

Nie, nie ma innego rozwiązania. Powinieneś jednak zrekompensować swoją procedurę, aby robić tylko to, czego potrzebujesz. Jeśli potrzebujesz danych wyjściowych dla innych połączeń, spróbuj podzielić procedurę na dwie.

0

Wolisz spróbować zwrócić dane za pomocą parametru wyjściowego i zwrócić kod statusu jako wartość zwracaną przez procedurę?

Nie można łatwo przywrócić pełnego zestawu wyników za pomocą tego parametru wyjściowego, ale można zwrócić niektóre rozgraniczone dane w wybranym formacie.

+0

Jak już powiedziałem, nie mogę zmienić procedury przechowywanej, która zwraca zestaw wyników. –

+0

Czy możesz zawinąć to w innej procedurze, nad którą masz kontrolę? Twoje opakowanie może wyrzucić zestaw wyników. – Allbite

1

Użyj opcjonalnego parametru wyjściowego.

lub skorzystać z poniższego przypadku

Create procedure Check @c int 
as 
begin 
if @c = 1 
    select 1 
else 
    print 1 
end 

pisać każdy stan, który zadowoli i że wraca ci podanych wartości. użyj tego parametru jako opcjonalnego, aby nie pojawiła się żadna inna zmiana w Twojej procedurze.

Powiązane problemy