Udostępnij za pośrednictwem


Rewriting Stored Procedures as Functions

W tym temacie opisano sposób ustalania, czy ponownego wpisywania logiki istniejącej procedura przechowywana, funkcji zdefiniowanej przez użytkownika.Na przykład jeśli chcesz wywołać procedura przechowywana bezpośrednio z kwerendy przepakowania kod w funkcja zdefiniowanej przez użytkownika.

Ogólnie, jeżeli w wyniku procedura przechowywana, pojedyncze, zestaw wyników, definiowanie funkcja zwracająca tabelę.Jeśli procedura przechowywana oblicza wartość wartość skalarna, należy zdefiniować funkcja wartość skalarna.

Kryteria dla tabel Valued funkcje

Jeśli procedura przechowywana spełnia następujące kryteria, jest odpowiednie do pełnienia funkcja ponownie zapisywane, tak ich przechowywały jako funkcja zwracająca tabelę:

  • Logiczne jest expressible w pojedynczej instrukcja SELECT, ale jest tylko z powodu konieczności parametry procedura przechowywana, a nie w widoku.W tym scenariuszu może być obsługiwane z wbudowanego funkcja zwracająca tabelę.

  • Procedura przechowywana wykonuje operacje aktualizacji, z wyjątkiem do zmiennych Tabela.

  • Nie ma potrzeby dla dynamicznych instrukcji wykonać

  • Procedura przechowywana zwraca jeden zestaw wyników.

  • Podstawowym celem procedura przechowywana jest tworzenie pośrednie wyniki, które mają być ładowane do tymczasowej tabela, która jest następnie kwerendę w instrukcja SELECT.Instrukcji INSERT... EXEC można napisać za pomocą funkcji wycenione tabela.Na przykład rozważmy następujący ciąg:

    INSERT #temp EXEC sp_getresults
    SELECT ...
    FROM #temp, t1
    WHERE ...
    

    The sp_getresults procedura przechowywana can be rewritten as a funkcja zwracająca tabelę, for example fn_results(), which means the preceding statements can be rewritten as:

    INSERT #temp
    SELECT ...
    FROM fn_results(), t1
    WHERE ...
    

Poprawiania rozszerzonych procedur przechowywanych przy użyciu środowiska CLR

Funkcje środowiska CLR zapewniają bardziej niezawodne i skalowalne zamiast rozszerzonych procedur przechowywanych.Wiele rozszerzonych procedur przechowywanych wykonywać niektóre zadania podczas wykonywania obliczeń, które jest trudniejsza do wyrażenia w Transact-SQL. Ponownie zapisywane, tak te procedury przechowywane mogą być przechowywały przy użyciu środowiska CLR, biorąc pod uwagę korzyści opisane powyżej.Ponadto rozszerzonych procedur przechowywanych, które zwracają zestawy wyników po zalogowaniu się do zasób zewnętrznego, takiego jak plik lub ponownie zapisywane, tak usługa sieci Web może być przechowywały za pomocą funkcja wycenione tabela środowiska CLR.Aby uzyskać więcej informacji zobaczCreating CLR Functions.