`

经典的多语句表值函数

 
阅读更多

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;

分享到:
评论

相关推荐

    多语句表值函数.doc

    多语句表值函数在数据库领域中是一种强大的工具,它结合了标量型和内联表值函数的特点,能够返回一个完整的数据表。这种函数在处理复杂的数据操作和需要多次查询、筛选、合并数据的场景下尤其有用。下面将详细阐述多...

    SQL表值函数

    SQL表值函数有很多优点,包括: * 可以减少程序代码量 * 可以提高查询效率 * 可以使代码变得更加简洁易读 * 可以提高数据的安全性 三、如何创建SQL表值函数 创建SQL表值函数需要使用CREATE FUNCTION语句。下面是...

    SQL SERVER函数之深入表值函数的处理分析

    表值函数可以返回结果集,结果集可以是单个值,也可以是多行多列的表数据。例如: ```sql CREATE FUNCTION Fun_GetReportNews (@type varchar(10)) RETURNS TABLE AS RETURN ( SELECT TPR_ID, TPR_Title, TPR_Date ...

    探讨使用SQL Server表值函数扩展Reporting Services的数据访问功能.pdf

    标题中的核心知识点是使用SQL Server表值函数来扩展Reporting Services的数据访问能力。描述进一步强调了这一主题,通过实例分析展示了如何利用SQL Server的表值函数创造更多样化、更具创新性的报表。 表值函数是...

    vc++ 函数经典 vc++ 函数经典 vc++ 函数经典

    在VC++编程环境中,函数是实现特定功能的基本代码单元,它们可以被其他代码多次调用,从而提高了程序的可重用性和效率。本篇将深入探讨VC++中的函数经典概念和应用。 一、函数定义与声明 在VC++中,函数的定义包括...

    SQL自定义函数.pdf

    根据提供的信息,我们可以深入探讨SQL自定义函数的三个主要类别:标量函数、内联表值函数和多语句表值函数。 1. **标量函数**: 标量函数返回单一值,可以是任何非表数据类型,如整数、字符串或日期。在创建标量...

    Sqlserver 自定义函数 Function使用介绍

    本篇主要关注SQL Server 2008中的三种自定义函数:标量函数、内联表值函数和多语句表值函数。 1. **标量函数**: 标量函数返回单个值,可以是任何SQL Server支持的数据类型。在创建标量函数时,其语法包括`CREATE ...

    经典SQL语句函数大全

    本资源“经典SQL语句函数大全”聚焦于SQL中的各种函数,旨在帮助用户掌握SQL的核心功能并提升数据库操作效率。** **一、SQL基本概念** SQL分为DDL(Data Definition Language)和DML(Data Manipulation Language)...

    经典的sql数据库函数语句

    ### 经典的SQL数据库函数语句解析 在数据库管理与查询中,SQL(Structured Query Language,结构化查询语言)是一种极为重要的工具。它不仅用于数据的存储与检索,还能帮助我们实现对数据的高效管理和分析。下面将...

    sql server 自定义函数

    - **多语句表值函数** (Multi-Statement Table-Valued Functions): 使用多条`SELECT`语句或其他T-SQL语句返回结果。 3. **内嵌表值函数** (Inline Table-Valued Functions): 使用一条`SELECT`语句返回结果。这类...

    c 语言函数表(函数用法)

    - 函数可以通过`return`语句返回一个值。例如,`add`函数通过`return a + b;`返回两个整数的和。 - 如果函数没有`return`语句或`return`后没有表达式,其返回类型应为`void`,表示不返回任何值。 5. **无参数函数...

    SQL自定义函数的好处

    SQL自定义函数可以分为三种类型:标量型函数、内联表值型函数和多声明表值型函数。 标量型函数是指返回一个确定类型的标量值的函数,例如返回一个整数或字符串等。它的返回值类型可以是除TEXT、NTEXT、IMAGE、...

    在SQL Server中使用表值函数

    表值函数分为三类:内置表值函数、自定义表值函数(用户定义函数,UDF)和多语句表值函数(MS-TVF)。每种类型的函数都有其独特的特点和用途。 1. 内置表值函数: SQL Server提供了一系列内置的表值函数,如`ROW_...

    数据库函数和查询语句

    本文主要讨论数据库中的函数、查询语句及其相关概念。 首先,`INSERT`语句用于向表中添加新的记录。你可以指定要插入的列名以及对应的值,如果省略列名,那么默认会为表的所有列插入值。例如,`INSERT INTO ...

    VBA 自定义 AC值函数

    "AC值函数"可能是用户根据需求创建的一个特定的统计或分析函数。 在Excel的内置函数中并没有"AC值"这个概念,所以它可能是指一种特定的计算方法,例如平均值、条件计算、自定义统计指标等。为了深入理解这个自定义...

    SQL复习之聚集函数

    GROUP BY语句与聚集函数一起使用,将数据按一个或多个列进行分组,以便对每个组应用聚集函数。例如,按性别分组统计用户数量: ```sql SELECT gender, COUNT(*) FROM users_table GROUP BY gender; ``` 6. **...

    经典oracle函数介绍全收录

    本文主要聚焦于Oracle中的经典函数,特别是单值函数,这些函数在处理数值、字符和日期类型的数据时发挥着关键作用。 首先,我们来看看数值型函数。Oracle提供了一系列用于处理数值的函数,如`MOD(n1, n2)`用于计算...

Global site tag (gtag.js) - Google Analytics