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;