Share via


Satır içi kullanıcı tanımlı işlevler

Satır içi kullanıcı tanımlı işlevler olan alt küme küme küme kümesini döndüren kullanıcı tanımlı işlevler bir table veri türü.Satır içi işlevleri parametreli görünümler işlevselliğini elde etmek için kullanılabilir.

Aşağıdaki örnek deposu adlarını ve şehirleri belirtilen bölge için verir.

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

Daha Genelleştirilmiş ve belirttiğiniz kullanıcılar sağlar bu görünümü daha iyi olurdu bölge içinde görüntüleme ilgileniyorsanız.Görünümler, ancak parametreleri where yan tümce tümce tümcesinde belirtilen arama koşullarında desteklemez.Satır içi kullanıcı tanımlı işlevler, arama koşulu where yan tümce tümce tümcesinde belirtilen parametreleri desteklemek için kullanılabilir.Aşağıdaki örnek, kullanıcıların kendi sorguda bölge belirtmek bir satır içi işlev oluşturur:

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

Satır içi kullanıcı tanımlı işlev kuralları

Satır içi kullanıcı tanımlı işlevler, bu kuralları izleyin:

  • Yalnızca anahtar sözcüğünü DÖNDÜRÜR yan tümce tümce tümce içeren table.Sonuç küme Seç, biçimi ayarlandığından dönen bir değişkenin biçimini tanımlamak gerekmez deyim return yantümcesini de.

  • Yok yok function_body ayrılmış BEGIN ve end.

  • return yan tümce parantez içinde tek bir deyim içerir.sonuç küme Seçin deyim işlevi tarafından döndürülen bir tablo oluşturur.Bir satır içi işlev içinde kullanılan deyim select deyimleri görünümlerinde kullanılan kısıtlamalar tabidir.

  • Tablo değerli işlev yalnızca sabitler kabul eder veya @ local_variable bağımsız değişkenleri

Satır içi işlevleri ve dizin oluşturulmuş görünümler

Satır içi işlevleri, dizin oluşturulmuş görünümler gücünü artırmak için de kullanılabilir.dizinli görünüm, saklı uyarlamak için where yan tümce tümce tümce arama koşulları parametrelerini kullanamazsınız sonuç küme belirli kullanıcılar için.Ancak, tam depolandığı dizinli görünüm tanımlayabilirsiniz küme görünümü eşleştirir ve ardından satır içi tanımlayan veri işlev içeren dizinli görünüm üzerinden kullanıcıların sonuçlar uyarlamak arama koşulu parametreli.Görünüm tanımını karmaşık ise, bir sonuç küme oluşturmak için yapılan çalışmanın en aggregates oluşturma veya kümelenmiş dizin üzerinde görünüm oluşturulduğunda, birkaç Tabloları birleştirme gibi işlemleri kapsar.Sonra dizinlenmiş görünümün başvuran bir satır içi işlev oluşturursanız, işlev belirli satırların materialized dönmek için kullanıcının parametreli filtre uygulayabilirsiniz sonuç küme dizinlenmiş görünümün.Örneğin:

  1. Görünüm Tanımla vw_QuarterlySales bir sonuç küme özetlenmiş satış verilerini tüm mağazalar için üç aylık raporlar halinde tüm satış verilerini toplayan

  2. kümelenmiş dizin oluşturmak vw_QuarterlySales materialize için bir sonuç küme içeren özetlenmiş verileri.

  3. Özetlenen verilere filtre uygulamak için bir satır içi işlev oluşturun:

    CREATE FUNCTION dbo.ufn_QuarterlySalesByStore
         ( @StoreID int )
    RETURNS table
    AS
    RETURN (
            SELECT *
            FROM SalesDB.dbo.vw_QuarterlySales
            WHERE StoreID = @StoreID
           )
    
  4. Kullanıcıların kendi özel deposu için veri alabilir ve satır içi işlev seçerek:

    SELECT *
    FROM fn_QuarterlySalesByStore(14432)
    

Adım 4 verilen sorguları gerçekleştirmek için gereken çalışma çoğu olduğu için toplu üç aylık satış verilerini.Bu çalışma sırasında adım 2 kez yapılır.Adım 4'te tek tek her deyim kullanır işlev fn_QuarterlySalesByStore özgü toplanan verileri süzmek içinkendilerine deposuna.