CLR パラメーター データのマッピング

適用対象:yesSQL Server (サポートされているすべてのバージョン)

次の表に、Microsoft SQL Serverデータ型、System.Data.SqlTypes 名前空間のSQL Serverに対応する共通言語ランタイム (CLR) と、Microsoft .NET Frameworkのネイティブ CLR と同等のデータ型を示します。

SQL Server のデータ型 型 (System.Data.SqlTypes または Microsoft.SqlServer.Types) CLR データ型 (.NET Framework)
bigint SqlInt64 Int64、Null 許容<Int64>
[バイナリ] SqlBytes、SqlBinary Byte[]
bit SqlBoolean ブール値、Null 許容<ブール値>
char なし なし
cursor なし なし
date Sqldatetime DateTime、Null 許容<DateTime>
datetime Sqldatetime DateTime、Null 許容<DateTime>
datetime2 なし DateTime、Null 許容<DateTime>
DATETIMEOFFSET なし DateTimeOffset、Null 許容<DateTimeOffset>
decimal SqlDecimal Decimal、Null 許容<10 進数>
float SqlDouble Double、Null 許容<Double>
geography SqlGeography

SqlGeography は、SQL Serverと共にインストールされ、SQL Server機能パックからダウンロードできるMicrosoft.SqlServer.Types.dllで定義されています。
なし
geometry SqlGeometry

SqlGeometry はMicrosoft.SqlServer.Types.dllで定義されており、SQL Serverと共にインストールされ、SQL Server機能パックからダウンロードできます。
なし
hierarchyid SqlHierarchyId

SqlHierarchyId はMicrosoft.SqlServer.Types.dllで定義されており、SQL Serverと共にインストールされ、SQL Server機能パックからダウンロードできます。
なし
image なし なし
int SqlInt32 Int32、Null 許容<Int32>
money Sqlmoney Decimal、Null 許容<10 進数>
nchar SqlChars、SqlString String, Char[]
ntext なし なし
numeric SqlDecimal Decimal、Null 許容<10 進数>
nvarchar SqlChars、SqlString

SQLChars はデータ転送とアクセスに適しており、 SQLString は文字列操作の実行に適しています。
String, Char[]
nvarchar(1), nchar(1) SqlChars、SqlString Char、String、Char[]、Nullable<char>
real SqlSingle ( ただし、SqlSingle の範囲は 実際より大きい) 単一、Null 許容<単一>
rowversion なし Byte[]
smallint SqlInt16 Int16、Null 許容<Int16>
smallmoney Sqlmoney Decimal、Null 許容<10 進数>
sql_variant なし Object
テーブル なし なし
text なし なし
time なし TimeSpan、Null 許容<TimeSpan>
timestamp なし なし
tinyint SqlByte バイト、Null 許容<バイト>
uniqueidentifier Sqlguid Guid、Null 許容<Guid>
User-defined type(UDT) なし 同じアセンブリまたは依存アセンブリ内のユーザー定義型にバインドされている同じクラス
varbinary SqlBytes、SqlBinary Byte[]
varbinary(1) binary(1) SqlBytes、SqlBinary byte、Byte[]、Null 許容<バイト>
varchar なし なし
xml Sqlxml なし

out パラメーターによるデータ型の自動変換

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  

アセンブリがデータベースにビルドされて作成されると、ストアド プロシージャは次の Transact-SQL を使用してSQL Serverで作成されます。これは、int のSQL Serverデータ型を OUTPUT パラメーターとして指定します。

CREATE PROCEDURE PriceSum (@sum int OUTPUT)  
AS EXTERNAL NAME TestStoredProc.StoredProcedures.PriceSum  

CLR ストアド プロシージャが呼び出されると、 SqlInt32 データ型は自動的に int データ型に変換され、呼び出し元のプログラムに返されます。

ただし、すべての CLR データ型を out パラメーターを使用して同等のSQL Serverデータ型に自動的に変換できるわけではありません。 次の表に、これらの例外を示します。

CLR データ型 (SQL Server) SQL Server のデータ型
10 進数 smallmoney
Sqlmoney smallmoney
10 進数 money
DateTime smalldatetime
Sqldatetime smalldatetime

変更履歴

変更内容
SqlGeographySqlGeometryおよび SqlHierarchyId 型をマッピング テーブルに追加しました。

参照

.NET Framework での SQL Server データ型