AdventureWorks のユーザー定義関数

AdventureWorks サンプル OLTP データベースには、いくつかの Transact-SQL ユーザー定義関数が含まれています。共通言語ランタイム (CLR) ユーザー定義関数の例については、「CLR プログラミング サンプル」を参照してください。

CLR ユーザー定義関数

次の表では、利用可能な CLR ユーザー定義関数のサンプルについて説明します。CLR ユーザー定義関数の詳細については、「CLR ユーザー定義関数」を参照してください。

サンプル

説明

補助文字対応文字列操作

5 つの Transact-SQL 文字列関数の実装が含まれています。これらの文字列関数が提供する文字列変更機能は組み込み関数と同じですが、補助文字を認識する機能が追加されているため、Unicode と補助文字の両方の文字列を処理できます。実装されている関数は、len_s()、left_s()、right_s()、sub_s()、および replace_s() の 5 つです。これらは、組み込み文字列関数の LEN()、LEFT()、RIGHT()、SUBSTRING()、および REPLACE() に対応します。

インプロセス データ アクセス サンプル

SQLCLR インプロセス データ アクセス プロバイダーのさまざまな機能を実行できる単純な関数が複数含まれています。

AdventureWorks Cycles CLR レイヤー

Currency ユーザー定義型のインスタンスを返す通貨換算関数が含まれています。

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 データベースでは、従業員、顧客 (販売店の代表者または個人消費者)、および仕入先の代表者の名前が 1 つのテーブル (Contact テーブル) に含まれています。テーブル値関数 ufnGetContactInformation は、指定された ContactID に対応する 1 行のデータを返します。

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;