Wbudowane funkcje zdefiniowane przez użytkownika
Wbudowane funkcje zdefiniowane przez użytkownika są podzbiór z funkcje zdefiniowane przez użytkownika zwracające table typu danych.Wbudowane funkcje można osiągnąć efekt sparametryzowana widoki.
Poniższy przykład zwraca przechowywania nazwisk i miast w określonym region.
USE AdventureWorks2008R2;
GO
CREATE VIEW CustomersByRegion
AS
SELECT DISTINCT S.Name AS Store, A.City
FROM Sales.Store AS S
JOIN Sales.BusinessEntityAddress AS BEA ON BEA.BusinessEntityID = S.BusinessEntityID
JOIN Person.Address AS A ON A.AddressID = BEA.AddressID
JOIN Person.StateProvince SP ON
SP.StateProvinceID = A.StateProvinceID
WHERE SP.Name = N'Washington';
GO
Ten widok byłoby lepiej, jeśli były bardziej powszechny i umożliwić użytkownikom określenie region są wybrane.Widoki, jednak nie obsługuje parametrów w warunkach wyszukiwania określone w klauzula WHERE.Wbudowane funkcje zdefiniowane przez użytkownika można obsługiwać parametry w warunkach wyszukiwania określone w klauzula WHERE.Poniższy przykład tworzy funkcja śródwierszowej, które umożliwia określenie region w ich kwerendy:
USE AdventureWorks2008R2;
GO
IF OBJECT_ID(N'Sales.ufn_CustomerNamesInRegion', N'IF') IS NOT NULL
DROP FUNCTION Sales.ufn_CustomerNamesInRegion;
GO
CREATE FUNCTION Sales.ufn_CustomerNamesInRegion
( @Region nvarchar(50) )
RETURNS table
AS
RETURN (
SELECT DISTINCT s.Name AS Store, a.City
FROM Sales.Store AS s
INNER JOIN Person.BusinessEntityAddress AS bea
ON bea.BusinessEntityID = s.BusinessEntityID
INNER JOIN Person.Address AS a
ON a.AddressID = bea.AddressID
INNER JOIN Person.StateProvince AS sp
ON sp.StateProvinceID = a.StateProvinceID
WHERE sp.Name = @Region
);
GO
-- Example of calling the function for a specific region
SELECT *
FROM Sales.ufn_CustomerNamesInRegion(N'Washington')
ORDER BY City;
GO
Reguły zdefiniowane przez użytkownika wbudowanej funkcji
Wbudowane funkcje zdefiniowane przez użytkownika wykonać następujące czynności:
Klauzula zwraca zawiera tylko słowo kluczowe table.Nie trzeba zdefiniować format zmienną zwracaną, ponieważ jest ustawiona w formacie zestaw wyników instrukcja SELECT w klauzula zwrotu.
Nie ma żadnych function_body rozdzielone rozpoczęcia i zakończenia.
Klauzula zwrotu zawiera single SELECT instrukcja w nawiasach.Zestaw wyników instrukcja SELECT formularzy tabela zwrócone przez funkcja.Instrukcja SELECT w funkcja śródwierszowej podlega takim samym restrykcjom jak używane w widokach instrukcji SELECT.
funkcja zwracająca tabelę Akceptuje tylko stałe lub @ local_variable argumenty
Wbudowane funkcje i widoki indeksowane
Wbudowane funkcje można również zwiększyć moc Widoki indeksowane.Za pomocą parametrów w warunkach jego wyszukiwania klauzula WHERE samego indeksowany widok nie można dostosować przechowywane zestaw wyników do określonych użytkowników.Można, jednak zdefiniować indeksowany widok, przechowujący kompletny zestaw danych, który pasuje do widoku i następnie zdefiniuj funkcja śródwierszowej nad indeksowany widok, zawierający warunki wyszukiwania sparametryzowana, które umożliwiają użytkownikom dostosować ich wyniki.Jeśli definicja widoku złożonego, większość pracy wykonanej do utworzenia zestaw wyników obejmuje operacje, takie jak tworzenie agregatów lub przyłączenie się do kilku tabel, podczas tworzenia indeks klastrowany w widoku.funkcja można zastosować filtry sparametryzowana użytkownika zwrócić wiersze z zestaw wyników materialized indeksowany widok, jeśli utworzy funkcja śródwierszowej, która odwołuje się do indeksowany widok.Na przykład:
Definiowanie widoku vw_QuarterlySales agregatów, wszystkie dane dotyczące sprzedaży zestaw wyników, Raporty podsumowań danych sprzedaży według kwartału dla wszystkich magazynów.
Tworzenie indeks klastrowany w vw_QuarterlySales do materialize zestaw wyników zawierający podsumowanych danych.
Tworzenie funkcja oródwierszowej filtrowania podsumowane dane:
CREATE FUNCTION dbo.ufn_QuarterlySalesByStore ( @StoreID int ) RETURNS table AS RETURN ( SELECT * FROM SalesDB.dbo.vw_QuarterlySales WHERE StoreID = @StoreID )
Użytkownicy mogli uzyskać dostęp dla ich określonego magazynu danych, wybierając z funkcja śródwierszowej:
SELECT * FROM fn_QuarterlySalesByStore(14432)
Większość pracy wymagane do spełnienia kwerend wydane w kroku 4 jest wartość zagregowana danych sprzedaży według kwartałów.Ta operacja jest wykonywana raz w kroku 2.Funkcja każdego indywidualnego instrukcja SELECT w kroku 4 fn_QuarterlySalesByStore do odfiltrowywania zagregowanych danych specyficznych dla ich przechowywania.