Northwind Database (Document! X Sample)
AdventureWorks Database / dbo Schema / dbo.ufnGetContactInformation User Defined Function
In This Topic
    dbo.ufnGetContactInformation User Defined Function
    In This Topic
    Description
    Table value function returning the first name, last name, job title and contact type for a given contact.
    Properties
    Creation Date27/10/2017 14:33
    Encrypted
    Ansi Nulls
    Parameters
    ParameterDirectionDescriptionData TypeSize
    InInput parameter for the table value function ufnGetContactInformation. Enter a valid PersonID from the Person.Contact table.Integer4
    Return ValueResult table returned by table valued functionEmpty0
    Objects that dbo.ufnGetContactInformation depends on
     Database ObjectObject TypeDescriptionDep Level
    dbo.AccountNumber datatypedbo.AccountNumberUser Defined Data Type 2
    Person.BusinessEntity tablePerson.BusinessEntityTableSource of the ID that connects vendors, customers, and employees with address and contact information.2
    Person.BusinessEntityContact tablePerson.BusinessEntityContactTableCross-reference table mapping stores, vendors, and employees to people1
    Person.ContactType tablePerson.ContactTypeTableLookup table containing the types of business entity contacts.1
    Person.CountryRegion tablePerson.CountryRegionTableLookup table containing the ISO standard codes for countries and regions.4
    Sales.Customer tableSales.CustomerTableCurrent customer information. Also see the Person and Store tables.2
    HumanResources.Employee tableHumanResources.EmployeeTableEmployee information such as salary, department, and title.3
    dbo.ErrorLog tabledbo.ErrorLogTableAudit table tracking errors in the the AdventureWorks database that are caught by the CATCH block of a TRY...CATCH construct. Data is inserted by stored procedure dbo.uspLogError when it is executed from inside the CATCH block of a TRY...CATCH construct.3
    dbo.Flag datatypedbo.FlagUser Defined Data Type 4
    dbo.NameStyle datatypedbo.NameStyleUser Defined Data Type 5
    Person.Person tablePerson.PersonTableHuman beings involved with AdventureWorks: employees, customer contacts, and vendor contacts.4
    Sales.SalesPerson tableSales.SalesPersonTableSales representative current information.2
    Sales.SalesTerritory tableSales.SalesTerritoryTableSales territory lookup table.3
    Sales.Store tableSales.StoreTableCustomers (resellers) of Adventure Works products.1
    dbo.ufnLeadingZeros functiondbo.ufnLeadingZerosUser Defined FunctionScalar function used by the Sales.Customer table to help set the account number.3
    dbo.uspLogError proceduredbo.uspLogErrorStored ProcedureLogs error information in the ErrorLog table about the error that caused execution to jump to the CATCH block of a TRY...CATCH construct. Should be executed from within the scope of a CATCH block otherwise it will return without inserting error information.2
    dbo.uspPrintError proceduredbo.uspPrintErrorStored ProcedurePrints error information about the error that caused execution to jump to the CATCH block of a TRY...CATCH construct. Should be executed from within the scope of a CATCH block otherwise it will return without printing any error information.2
    Purchasing.Vendor tablePurchasing.VendorTableCompanies from whom Adventure Works Cycles purchases parts or other goods.1
    Procedure Source Code
    CREATE FUNCTION [dbo].[ufnGetContactInformation](@PersonID int)
    RETURNS @retContactInformation TABLE 
    (
        -- Columns returned by the function
        [PersonID] int NOT NULL, 
        [FirstName] [nvarchar](50) NULL, 
        [LastName] [nvarchar](50) NULL, 
        [JobTitle] [nvarchar](50) NULL,
        [BusinessEntityType] [nvarchar](50) NULL
    )
    AS 
    
    -- Returns the first name, last name, job title and business entity type for the specified contact.
    -- Since a contact can serve multiple roles, more than one row may be returned.
    BEGIN
        IF @PersonID IS NOT NULL 
            BEGIN
            IF EXISTS(SELECT * FROM [HumanResources].[Employee] e 
                        WHERE e.[BusinessEntityID] = @PersonID) 
                INSERT INTO @retContactInformation
                    SELECT @PersonID, p.FirstName, p.LastName, e.[JobTitle], 'Employee'
                    FROM [HumanResources].[Employee] AS e
                        INNER JOIN [Person].[Person] p
                        ON p.[BusinessEntityID] = e.[BusinessEntityID]
                    WHERE e.[BusinessEntityID] = @PersonID;
    
            IF EXISTS(SELECT * FROM [Purchasing].[Vendor] AS v
                        INNER JOIN [Person].[BusinessEntityContact] bec 
                        ON bec.[BusinessEntityID] = v.[BusinessEntityID]
                        WHERE bec.[PersonID] = @PersonID)
                INSERT INTO @retContactInformation
                    SELECT @PersonID, p.FirstName, p.LastName, ct.[Name], 'Vendor Contact' 
                    FROM [Purchasing].[Vendor] AS v
                        INNER JOIN [Person].[BusinessEntityContact] bec 
                        ON bec.[BusinessEntityID] = v.[BusinessEntityID]
                        INNER JOIN [Person].ContactType ct
                        ON ct.[ContactTypeID] = bec.[ContactTypeID]
                        INNER JOIN [Person].[Person] p
                        ON p.[BusinessEntityID] = bec.[PersonID]
                    WHERE bec.[PersonID] = @PersonID;
            
            IF EXISTS(SELECT * FROM [Sales].[Store] AS s
                        INNER JOIN [Person].[BusinessEntityContact] bec 
                        ON bec.[BusinessEntityID] = s.[BusinessEntityID]
                        WHERE bec.[PersonID] = @PersonID)
                INSERT INTO @retContactInformation
                    SELECT @PersonID, p.FirstName, p.LastName, ct.[Name], 'Store Contact' 
                    FROM [Sales].[Store] AS s
                        INNER JOIN [Person].[BusinessEntityContact] bec 
                        ON bec.[BusinessEntityID] = s.[BusinessEntityID]
                        INNER JOIN [Person].ContactType ct
                        ON ct.[ContactTypeID] = bec.[ContactTypeID]
                        INNER JOIN [Person].[Person] p
                        ON p.[BusinessEntityID] = bec.[PersonID]
                    WHERE bec.[PersonID] = @PersonID;
    
            IF EXISTS(SELECT * FROM [Person].[Person] AS p
                        INNER JOIN [Sales].[Customer] AS c
                        ON c.[PersonID] = p.[BusinessEntityID]
                        WHERE p.[BusinessEntityID] = @PersonID AND c.[StoreID] IS NULL) 
                INSERT INTO @retContactInformation
                    SELECT @PersonID, p.FirstName, p.LastName, NULL, 'Consumer' 
                    FROM [Person].[Person] AS p
                        INNER JOIN [Sales].[Customer] AS c
                        ON c.[PersonID] = p.[BusinessEntityID]
                        WHERE p.[BusinessEntityID] = @PersonID AND c.[StoreID] IS NULL; 
            END
    
        RETURN;
    END;
    
    See Also