• 经典的多语句表值函数


    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    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 = ContactID,
            @FirstName = FirstName,
            @LastName = LastName
        FROM [Person].[Contact]
        WHERE [ContactID] = @ContactID;

        SET @JobTitle =
            CASE
                -- Check for employee
                WHEN EXISTS(SELECT * FROM [HumanResources].[Employee] e
                    WHERE e.[ContactID] = @ContactID)
                    THEN (SELECT [Title]
                        FROM [HumanResources].[Employee]
                        WHERE [ContactID] = @ContactID)

                -- Check for vendor
                WHEN EXISTS(SELECT * FROM [Purchasing].[VendorContact] vc
                        INNER JOIN [Person].[ContactType] ct
                        ON vc.[ContactTypeID] = ct.[ContactTypeID]
                    WHERE vc.[ContactID] = @ContactID)
                    THEN (SELECT ct.[Name]
                        FROM [Purchasing].[VendorContact] vc
                            INNER JOIN [Person].[ContactType] ct
                            ON vc.[ContactTypeID] = ct.[ContactTypeID]
                        WHERE vc.[ContactID] = @ContactID)

                -- Check for store
                WHEN EXISTS(SELECT * FROM [Sales].[StoreContact] sc
                        INNER JOIN [Person].[ContactType] ct
                        ON sc.[ContactTypeID] = ct.[ContactTypeID]
                    WHERE sc.[ContactID] = @ContactID)
                    THEN (SELECT ct.[Name]
                        FROM [Sales].[StoreContact] sc
                            INNER JOIN [Person].[ContactType] ct
                            ON sc.[ContactTypeID] = ct.[ContactTypeID]
                        WHERE [ContactID] = @ContactID)

                ELSE NULL
            END;

        SET @ContactType =
            CASE
                -- Check for employee
                WHEN EXISTS(SELECT * FROM [HumanResources].[Employee] e
                    WHERE e.[ContactID] = @ContactID)
                    THEN 'Employee'

                -- Check for vendor
                WHEN EXISTS(SELECT * FROM [Purchasing].[VendorContact] vc
                        INNER JOIN [Person].[ContactType] ct
                        ON vc.[ContactTypeID] = ct.[ContactTypeID]
                    WHERE vc.[ContactID] = @ContactID)
                    THEN 'Vendor Contact'

                -- Check for store
                WHEN EXISTS(SELECT * FROM [Sales].[StoreContact] sc
                        INNER JOIN [Person].[ContactType] ct
                        ON sc.[ContactTypeID] = ct.[ContactTypeID]
                    WHERE sc.[ContactID] = @ContactID)
                    THEN 'Store Contact'

                -- Check for individual consumer
                WHEN EXISTS(SELECT * FROM [Sales].[Individual] i
                    WHERE i.[ContactID] = @ContactID)
                    THEN 'Consumer'
            END;

        -- Return the information to the caller
        IF @ContactID IS NOT NULL
        BEGIN
            INSERT @retContactInformation
            SELECT @ContactID, @FirstName, @LastName, @JobTitle, @ContactType;
        END;

        RETURN;
    END;

  • 相关阅读:
    Pro Andorid3第二章:设置开发环境
    Seminar 记录
    安装CGAL
    Literature review
    第七章:清楚简洁的英文 《英语科技写作(文法与修辞原则)》by 方克涛
    幻灯片制作去除模板背景
    vs2008下设置.h, .lib和 .dll 的路径配置全图及其意义
    配置环境变量
    PPT制作技巧
    #include文件时用双引号和尖括号的区别
  • 原文地址:https://www.cnblogs.com/huyong/p/2685683.html
Copyright © 2020-2023  润新知