Share via


Kullanıcı tanımlı tablo değerli işlevler

O getiri kullanıcı tanımlı işlevleri bir table veri türü olabilir güçlü etmenin görünümler.Bu işlevler tablo değerli işlev olarak adlandırılır.Tablo ya da görünümü ifadeler de burada izin verilen tablo değerli kullanıcı tanımlı bir işlev kullanılabilir Transact-SQL sorgular.Görünümler için tek bir deyim sınırlı olmasına karşın, kullanıcı tanımlı işlevler görünümlerinde mümkün olandan daha güçlü mantığı sağlayan ek ifadeler içerebilir.

Tablo değerli kullanıcı tanımlı bir işlev, tek bir sonuç küme döndüren saklı yordamlar da değiştirebilirsiniz.from yan tümce tümce tümcesinde tablo kullanıcı tanımlı bir işlev tarafından döndürülen başvurulabilir bir Transact-SQL deyim, ancak sonuç kümeleri döndüren saklı yordamlar olamaz.

Tablo değerli kullanıcı tanımlı bir işlev bileşenleri

Tablo değerli kullanıcı tanımlı bir işlev içinde:

  • DÖNDÜRÜR yan tümce tümce tümce işlev tarafından döndürülen bir tablo için yerel bir dönüş değişken adını tanımlar.DÖNDÜRÜR yan tümce tümce tümce de tablo biçimini tanımlar.işlev içinde yerel kapsam yerel dönüş değişken adı.

  • The Transact-SQL statements in the function body build and insert rows into the return variable defined by the RETURNS clause.

  • return deyim yürütüldüğünde, değişken eklenen satır sekmeli çıkışını döndürülen işlev.return deyim bağımsız değişken olamaz.

Hayır Transact-SQL bir tablo değerli işlev ifadelerine dönebilirsiniz bir sonuç küme doğrudan için kullanıcının.işlev kullanıcıya geri dönmek tek bilgidir table dönen işlev.

Not

The text in row table option is automatically set to 256 for a table returned by a user-defined function.Bu değiştirilemez.readtext, WRITETEXT ve updatetext deyimleri okuma veya yazma herhangi bölümleri kullanılamaz text, ntext, veya image sütunları tablo.Daha fazla bilgi için bkz: Satır veri.

Örnek

Aşağıdaki örnek oluşturur dbo.ufnGetContactInformation işlev ve gösterir bileşenlerinin tablo değerli işlev.Bu işlev, yerel dönüş değişken adıdır @retContactInformation.Deyimleri işlev gövdesinde satır işlevi tarafından döndürülen tablo sonuç oluşturmak için bu değişkeni ekleyin.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID(N'dbo.ufnGetContactInformation', N'TF') IS NOT NULL
    DROP FUNCTION dbo.ufnGetContactInformation;
GO
CREATE FUNCTION dbo.ufnGetContactInformation(@ContactID int)
RETURNS @retContactInformation TABLE 
(
    -- Columns returned by the function
    ContactID int PRIMARY KEY NOT NULL, 
    FirstName nvarchar(50) NULL, 
    LastName nvarchar(50) NULL, 
    JobTitle nvarchar(50) NULL, 
    ContactType nvarchar(50) NULL
)
AS 
-- Returns the first name, last name, job title, and contact type for the specified contact.
BEGIN
    DECLARE 
        @FirstName nvarchar(50), 
        @LastName nvarchar(50), 
        @JobTitle nvarchar(50), 
        @ContactType nvarchar(50);
    -- Get common contact information
    SELECT 
        @ContactID = BusinessEntityID, 
        @FirstName = FirstName, 
        @LastName = LastName
    FROM Person.Person 
    WHERE BusinessEntityID = @ContactID;
    -- Get contact job title
    SELECT @JobTitle = 
        CASE 
            -- Check for employee
            WHEN EXISTS(SELECT * FROM Person.Person AS p 
                        WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'EM') 
                THEN (SELECT JobTitle 
                      FROM HumanResources.Employee AS e
                      WHERE e.BusinessEntityID = @ContactID)
            -- Check for vendor
            WHEN EXISTS(SELECT * FROM Person.Person AS p 
                        WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'VC') 
                THEN (SELECT ct.Name 
                      FROM Person.ContactType AS ct 
                      INNER JOIN Person.BusinessEntityContact AS bec 
                          ON bec.ContactTypeID = ct.ContactTypeID  
                      WHERE bec.PersonID = @ContactID)

            -- Check for store
            WHEN EXISTS(SELECT * FROM Person.Person AS p 
                        WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'SC') 
                THEN (SELECT ct.Name 
                      FROM Person.ContactType AS ct 
                      INNER JOIN Person.BusinessEntityContact AS bec 
                          ON bec.ContactTypeID = ct.ContactTypeID  
                      WHERE bec.PersonID = @ContactID)
            ELSE NULL 
        END;
    -- Get contact type
    SET @ContactType = 
        CASE 
            -- Check for employee
            WHEN EXISTS(SELECT * FROM Person.Person AS p 
                        WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'EM') 
            THEN 'Employee'
            -- Check for vendor
            WHEN EXISTS(SELECT * FROM Person.Person AS p 
                        WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'VC')
            THEN 'Vendor Contact'
            -- Check for store
            WHEN EXISTS(SELECT * FROM Person.Person AS p 
                        WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'SC')
            THEN 'Store Contact'
            -- Check for individual consumer
            WHEN EXISTS(SELECT * FROM Person.Person AS p 
                        WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'IN') 
            THEN 'Consumer'
             -- Check for general contact
            WHEN EXISTS(SELECT * FROM Person.Person AS p 
                        WHERE p.BusinessEntityID = @ContactID AND p.PersonType = 'GC') 
            THEN 'General Contact'
        END;
    -- Return the information to the caller
    IF @ContactID IS NOT NULL 
    BEGIN
        INSERT @retContactInformation
        SELECT @ContactID, @FirstName, @LastName, @JobTitle, @ContactType;
    END;
    RETURN;
END;
GO

Aşağıdaki örnek, tablo değerli işlev kullanır dbo.ufnGetContactInformation from yan tümce tümce tümcesinde iki select deyimleri.

USE AdventureWorks2008R2;
GO
SELECT ContactID, FirstName, LastName, JobTitle, ContactType
FROM dbo.ufnGetContactInformation(1209);
GO
SELECT ContactID, FirstName, LastName, JobTitle, ContactType
FROM dbo.ufnGetContactInformation(5);
GO