Udostępnij za pośrednictwem


Inline User-Defined Functions

Wbudowane funkcje zdefiniowane przez użytkownika są podzbiorem funkcji zdefiniowanych przez użytkownika, które zwracają table Typ danych. Wbudowane funkcje mogą być używane do osiągnięcia funkcji sparametryzowana widoków.

W poniższym przykładzie są zwracane magazyn nazw i miast dla określonego region:

USE AdventureWorks;
GO
CREATE VIEW CustomersByRegion
AS
SELECT DISTINCT S.Name AS Store, A.City
FROM Sales.Store AS S
    JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID
    JOIN Person.Address AS A ON A.AddressID = CA.AddressID
    JOIN Person.StateProvince SP ON 
        SP.StateProvinceID = A.StateProvinceID
WHERE SP.Name = N'Washington';
GO

W tym widoku byłoby lepiej, gdy były bardziej uogólnione i pozwolić użytkownikom na określenie region są zainteresowani przeglądania.Widoki, jednak nie obsługuje parametrów w warunkach wyszukiwania określonych w klauzula WHERE.Wbudowane funkcje zdefiniowane przez użytkownika można używać do obsługi parametrów w warunkach wyszukiwania określonych w klauzula WHERE.Poniższy przykład tworzy wewnętrznej funkcja, które umożliwia określenie region w ich kwerendy:

Reguły zdefiniowane przez użytkownika wbudowanej funkcja

Wbudowane funkcje zdefiniowane przez użytkownika, wykonaj następujące zasady:

  • Klauzula zwraca zawiera tylko słowo kluczowe table. Nie masz do definiowania formatu zmiennej zwrotu, ponieważ jest ustawiona przez format zestaw wyników w klauzula RETURN w instrukcja SELECT.

  • Brak nie function_body rozdzielone BEGIN i END.

  • Klauzula RETURN zawiera pojedynczej instrukcja SELECT w nawiasie.Zestaw wyników formularzy instrukcja SELECT w tabela zwrócone przez funkcja.Instrukcja SELECT w funkcja wbudowanych jest tym samym ograniczeniom, jak używane w widokach instrukcji SELECT.

  • Funkcja wycenione tabela akceptuje tylko stałe lub @ local_variable argumenty

Wbudowane funkcje i widoki indeksowane

Wbudowane funkcje można również zwiększyć możliwości widoków indeksowanych.Za pomocą parametrów w warunkach poszukiwania klauzula WHERE samego widok indeksowany nie można dostosować sposób przechowywane zestaw wyników do określonych użytkowników.Można, jednak zdefiniować widok indeksowany, przechowujący kompletny zestaw danych, który pasuje do widoku i następnie zdefiniuj funkcja wbudowanych w widok indeksowany, który zawiera warunki wyszukiwania parametrami, które umożliwiają użytkownikom dostosować sposób ich wyniki.Jeśli definicja widoku jest złożony, większość pracy wykonanej do utworzenia zestaw wyników obejmuje operacji, takich jak tworzenie zagregowanych lub przyłączanie się do kilku tabel, podczas tworzenia indeks klastrowany w widoku.Jeśli utworzy wewnętrznej funkcja, która odwołuje się do widoku indeksowanego funkcja można zastosować filtry sparametryzowana przez użytkownika ma zwrócić zestaw wyników materialized widok indeksowany określone wiersze.Na przykład:

  1. Definiowanie widoku vw_QuarterlySales które agreguje wszystkie dane dotyczące sprzedaży zestaw wyników, raporty podsumowane dane o sprzedaży za kwartał, dla wszystkich magazynów.

  2. Tworzenie indeks klastrowany w vw_QuarterlySales Aby materialize wyniku ustawić zawierające podsumowane dane.

  3. Można utworzyć wbudowanej funkcja filtrowania podsumowane dane:

    CREATE FUNCTION dbo.ufn_QuarterlySalesByStore
         ( @StoreID int )
    RETURNS table
    AS
    RETURN (
            SELECT *
            FROM SalesDB.dbo.vw_QuarterlySales
            WHERE StoreID = @StoreID
           )
    
  4. Użytkownicy mogą następnie uzyskać dane dla ich określonego magazynu, wybierając z funkcja wbudowanych:

    SELECT *
    FROM fn_QuarterlySalesByStore(14432)
    

Większość pracy wymagane do spełnienia kwerendy, wydane w kroku 4 jest do agregowania danych sprzedaży według kwartałów.To praca jest wykonywana raz w kroku 2.Każda instrukcja SELECT poszczególnych w kroku 4 za pomocą funkcja fn_QuarterlySalesByStore Aby odfiltrować zagregowane dane specyficzne dla ich przechowywania.