ユーザー定義関数の実行

適用対象:SQL ServerAzure SQL Database

Transact-SQL を使用してユーザー定義関数を実行する

スカラー関数は、2 つ以上の要素から構成される名前を使用して呼び出す必要があります (<schema>.<function>)。 詳細については、「CREATE FUNCTION (Transact-SQL)」を参照してください。

制限事項

Transact-SQL では、<value>@parameter_name = <value> を使用してパラメーターを指定できます。 パラメーターは、トランザクションには含まれません。 そのため、後でロールバックされるトランザクションでパラメーターが変更された場合、パラメーターの値は以前の値に戻りません。 呼び出し元に返される値は常に、モジュールから戻る時点での値になります。

アクセス許可

EXECUTE ステートメントの実行に権限は必要ありませんが、 EXECUTE 文字列内で参照されるセキュリティ保護可能なリソースに対してはアクセス許可が必要です。 たとえば、この文字列に INSERT ステートメントが含まれている場合、EXECUTE ステートメントの呼び出し元は対象のテーブルに対する INSERT アクセス許可が必要です。 モジュール内に EXECUTE ステートメントが含まれている場合でも、EXECUTE ステートメントは検出されるたびにアクセス許可が確認されます。 詳細については、「EXECUTE」を参照してください。

Transact-SQL の使用

この例では、 ufnGetSalesOrderStatusText のほとんどのエディションで利用できる AdventureWorks2022スカラー値関数を使用しています。 この関数の目的は、所与の整数から売り上げ状況のテキスト値を返すことです。 @Status パラメーターに 1 ~ 7 の整数を渡すことで例を変えられます。

USE [AdventureWorks2022]
GO

-- Declare a variable to return the results of the function.
DECLARE @ret NVARCHAR(15);

-- Execute the function while passing a value to the @status parameter
EXEC @ret = dbo.ufnGetSalesOrderStatusText @Status = 5;

-- View the returned value.
-- The Execute and Select statements must be executed at the same time.
SELECT N'Order Status: ' + @ret;

結果は次のようになります。

Order Status: Shipped