Istnieją dwa rodzaje funkcji o wartościach tabelarycznych. Taką, która jest tylko instrukcją select i taką, która może mieć więcej wierszy niż tylko instrukcja select.
Pierwszym przykładem jest znany jako „Inline wycenione tabela funkcja”, który ma wzrost wydajności w porównaniu do Multi-oświadczenie wycenione tabela funkcji, mianowicie serwer bazy danych może recompose zapytania z ITVF inlined do zapytania dominującej w istocie staje się parametryzowane VIEWpodczas gdy MSTVF zachowuje się bardziej jak nieprzejrzysta procedura składowana (choć ma swoje zalety w porównaniu do sprocs). Funkcje wbudowane powinny być preferowane zamiast MSTVF. Jeśli musisz obliczyć i zapisać wartości pośrednie (takie jak wynik złożonego wyrażenia funkcji skalarnej), użyj podzapytania.
Dai,
1
Prawdopodobnie warto również wspomnieć, że jeśli wynik tego, czego używasz do wypełnienia zmiennej, którą chcesz ustawić, jest w jakikolwiek sposób uogólniany, możesz rozważyć napisanie oddzielnej funkcji, aby ją wygenerować. Pozwoliłoby to na użycie ITVF opisanego powyżej przez @Dai, ze wszystkimi jego zaletami, przy jednoczesnym wstawieniu dynamicznie generowanej wartości do funkcji. Właśnie napisałem funkcję za pomocą powyższego rozwiązania (dziękuję @MikaelEriksson!), Która przekazuje jeden ze swoich parametrów do funkcji pomocniczej, aby zaoszczędzić mi konieczności korzystania z formularza MSTVF.
naughtilus
1
największy koszt to wstawienie mojej funkcji i nie wiem jak pominąć ten koszt bez wstawiania do tabeli zmiennej i zwracania wyniku wyboru
uzay95
@naughtilus byłoby wspaniale zobaczyć taki przykład. Czy rozważałeś udzielenie innej odpowiedzi wraz ze swoją sugestią?
Odpowiedzi:
Istnieją dwa rodzaje funkcji o wartościach tabelarycznych. Taką, która jest tylko instrukcją select i taką, która może mieć więcej wierszy niż tylko instrukcja select.
To nie może mieć zmiennej:
Zamiast tego musisz zrobić tak:
źródło
VIEW
podczas gdy MSTVF zachowuje się bardziej jak nieprzejrzysta procedura składowana (choć ma swoje zalety w porównaniu do sprocs). Funkcje wbudowane powinny być preferowane zamiast MSTVF. Jeśli musisz obliczyć i zapisać wartości pośrednie (takie jak wynik złożonego wyrażenia funkcji skalarnej), użyj podzapytania.