Aracılığıyla paylaş


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

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

Aşağıdaki örnek, depolama adlarını ve şehirleri belirli bir bölge için verir:

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

Bu görünüm, daha Genelleştirilmiş ve kullanıcıların görüntülemek oldukları bölgeyi belirtin, daha iyi olacaktır.Görünümler, ancak parametreleri NEREDE belirtilen arama koşullarında desteklemeyen yan tümce.Satır içi kullanıcı tanımlı işlevler WHERE yan tümcesinde belirtilen arama koşullarında parametreleri desteklemek için kullanılır.Aşağıdaki örnek, kullanıcıların kendi sorguda bölge belirtmek bir satır içi işlev oluşturur:

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ük DÖNDÜRÜR yan tümce içeriyor table. Çünkü, dönüş değişkenin biçimini tanımlamak zorunda küme sonucu biçimi tarafından küme RETURN yan tümcendeki SELECT ifadesinin.

  • Yok yok function_body BEGIN ile END ayrılmış.

  • RETURN yan tümce, parantez içindeki tek bir deyim içerir.Sonuç küme deyimni işlev tarafından döndürülen bir tablo oluşturur.deyim içinde bir satır içi işlev olarak SELECT ifadelerine görünümlerde kullanılan aynı kısıtlamalar tabidir.

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

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

Satır içi işlevi, dizin oluşturulmuş görünümler gücünü artırmak için de kullanılabilir.dizinli görünüm, saklı sonucu uyarlamak için WHERE yan tümce arama koşulları, parametreleri kullanamazsınız küme belirli kullanıcılara.Ancak, tam depolandığı dizinli görünüm tanımlayabilirsiniz küme görünümü eşleştirir ve sonra bir satır içi tanımlama verileri sonuçlar uyarlamak, kullanıcıların arama koşullarını işlev içeren dizinlenmiş görünümün üzerinden parametreli.Görünüm tanımını karışıksa, işin çoğunu sonucu oluşturmak için gerçekleştirilen küme toplamları oluşturma ya da birden çok tablo, görünüm üzerinde bir kümelenmiş dizin oluşturulduğunda katılma gibi işlemleri içerir.Daha sonra dizinlenmiş görünümün başvuran bir satır içi işlevi oluşturursanız, işlev belirli satırları materialized sonuç geri dönmek için kullanıcının parametreli filtre uygulayabilirsiniz küme dizinlenmiş görünümün.Örneğin:

  1. Görünüm Tanımla vw_QuarterlySales Sonuç, tüm satış verilerini toplayan küme tüm depoları için üç aylık olarak özetlenmiş satış verilerini bildirir.

  2. kümelenmiş dizin oluşturmak vw_QuarterlySales bir sonuç materialize özetlenmiş verileri içeren ayarlayın.

  3. Oluşturduğunuz bir satır içi işlev özetlenen verilere filtre uygulamak için:

    CREATE FUNCTION dbo.ufn_QuarterlySalesByStore
         ( @StoreID int )
    RETURNS table
    AS
    RETURN (
            SELECT *
            FROM SalesDB.dbo.vw_QuarterlySales
            WHERE StoreID = @StoreID
           )
    
  4. Kullanıcılar daha sonra belirli bir depo verileri satır içi işaretleyerek alabilirsiniz işlev:

    SELECT *
    FROM fn_QuarterlySalesByStore(14432)
    

Adım 4 verilen sorgularını karşılamak için gereken işin çoğunu olan üç aylık dönemlere göre satış verilerini toplamak için.Bu iş bir kez, adım 2'saatinde yapılır.Adım 4 tek tek her SELECT deyiminde işlevini kullanır. fn_QuarterlySalesByStore Toplanan veriler mağazaya, belirli filtre için .