AdventureWorks 中的使用者定義函數

AdventureWorks 範例 OLTP 資料庫包含數個 Transact-SQL 使用者定義函數。<CLR 程式設計範例>中提供 Common Language Runtime (CLR) 使用者自訂函數的範例。

CLR 使用者自訂函數

下表列出可用的 CLR 使用者自訂函數範例。如需有關 CLR 使用者定義函數的詳細資訊,請參閱<CLR 使用者定義函數>。

範例

說明

增補感知的字串操作

顯示五個 Transact-SQL 字串函數的實作,提供與內建字串修改函數相同的方式,但是額外補充字元感知 (Character-aware) 能力,因此可以處理 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 reflection 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;