CLR メソッドでは、入力パラメータを out 修飾子 (Microsoft Visual C#) または <Out()> ByRef (Microsoft Visual Basic) でマークすることにより、呼び出し側のコードまたはプログラムに情報を返すことができます。System.Data.SqlTypes 名前空間での入力パラメータが CLR データ型で、呼び出し側のプログラムがこれと同等な SQL Server データ型を入力パラメータとして指定する場合、CLR メソッドがデータ型を返すと、自動的に型の変換が行われます。
たとえば、次の CLR ストアド プロシージャには、out (C#) または <Out()> ByRef (Visual Basic) でマークされている SqlInt32 CLR データ型の入力パラメータがあります。
[Microsoft.SqlServer.Server.SqlProcedure]
public static void PriceSum(out SqlInt32 value)
{ … }
<Microsoft.SqlServer.Server.SqlProcedure> _
Public Shared Sub PriceSum( <Out()> ByRef value As SqlInt32)
…
End Sub
データベースでアセンブリがビルドおよび作成された後、SQL Server では、OUTPUT パラメータとして int の SQL Server データ型を指定する、次の Transact-SQL によりストアド プロシージャが作成されます。
CREATE PROCEDURE PriceSum (@sum int OUTPUT)
AS EXTERNAL NAME TestStoredProc.StoredProcedures.PriceSum
CLR ストアド プロシージャが呼び出されると、SqlInt32 データ型は自動的に int データ型に変換され、呼び出し側のプログラムに返されます。
ただし、out パラメータにより自動的にすべての CLR データ型を同等な SQL Server データ型に変換できるとは限りません。次の表に、これらの例外を示します。
|
CLR データ型 (SQL Server)
|
SQL Server データ型
|
|
Decimal
|
smallmoney
|
|
SqlMoney
|
smallmoney
|
|
Decimal
|
money
|
|
DateTime
|
smalldatetime
|
|
SQLDateTime
|
smalldatetime
|