AdventureWorks 中的用户定义函数

AdventureWorks 示例 OLTP 数据库包含一些 Transact-SQL 用户定义函数。有关公共语言运行时 (CLR) 用户定义函数的示例,请参阅 CLR 可编程性示例

CLR 用户定义函数

下表列出了可供使用的 CLR 用户定义函数示例。有关 CLR 用户定义函数的详细信息,请参阅 CLR 用户定义函数

示例

说明

能够识别补充字符的字符串操作

显示五个 Transact-SQL 字符串函数的实现,这些函数提供了与内置函数相同的字符串修改功能,不同的是增加了识别增补字符的功能,因此既可以处理 Unicode 字符串,也可以处理由增补字符组成的字符串。这五个函数是 len_s()、left_s()、right_s()、sub_s() 和 replace_s()。它们与内置的字符串函数 LEN()、LEFT()、RIGHT()、SUBSTRING() 和 REPLACE() 功能相同。

进程内数据访问示例

包含几个简单函数,用于说明 SQLCLR 进程内数据访问提供程序的各种功能。

AdventureWorks Cycles CLR 层

包含一个货币换算函数,它可以返回货币用户定义类型的实例。

UDT 实用工具

包含向 Transact-SQL 公开程序集元数据的函数、以表的形式返回程序集中类型的示例流式表值函数以及返回用户定义类型的字段、方法和属性的函数。说明像流式表值函数、Microsoft .NET Framework 反射 API 以及从 Transact-SQL 中调用表值函数这样的技术。

Transact-SQL 用户定义函数

下表列出了 AdventureWorks 示例 OLTP 数据库中包含的一些 Transact-SQL 用户定义函数。有关 Transact-SQL 用户定义函数的详细信息,请参阅了解用户定义函数

用户定义函数

说明

输入参数

返回值

ufnLeadingZeros

向指定的整数值添加前导零的标量函数。该函数的返回值为 varchar(8) 数据类型。

@valueint

@ReturnValuevarchar(8)

ufnGetContactInformation

通过将复杂的查询封装到表值函数中,简化用户对数据的访问。

@contactidint

ContactIDint, FirstNamenvarchar(50), LastNamenvarchar(50), JobTitle nvarchar(50), ContactType nvarchar(50)

ufnGetProductDealerPrice

根据指定日期的产品标价计算特定产品的批发价的标量函数。

@productIDint, @orderdate

datetime

@DealerPricemoney

示例

A. 使用 dbo.ufnLeadingZeros

下面的示例使用 ufnLeadingZeros 函数根据 Customer 表的现有 CustomerID 列来生成客户帐号。

USE AdventureWorks;
GO
SELECT CustomerID,('AW' + dbo.ufnLeadingZeros(CustomerID)) 
    AS GenerateAccountNumber
FROM Sales.Customer
ORDER BY CustomerID;
GO

B. 使用 dbo.ufnGetContactInformation

AdventureWorks 数据库将雇员、客户(商店代表或个人客户)和供应商代表的姓名存储在一个表中:Contact 表。表值函数 ufnGetContactInformation 根据指定的 ContactID 返回一行。

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

C. 使用 dbo.ufnGetProductDealerPrice

下面的示例使用 ufnGetProductDealerPrice 函数返回 ProductListPriceHistory 表中所有产品的折算批发价。

USE AdventureWorks;
GO
SELECT ProductID, ListPrice, dbo.ufnGetProductDealerPrice(ProductID, StartDate) AS DealerPrice,
    StartDate, EndDate
FROM Production.ProductListPriceHistory
WHERE ListPrice > .0000
ORDER BY ProductID, StartDate;