次の方法で共有


行セットとパラメーターでのデータ型マッピング

SQL Server Native Client OLE DB プロバイダーでは、OLE DB で定義される次のデータ型を使用して、行セット内やパラメーター値として、SQL Server データを表します。これらのデータ型は、関数 IColumnsInfo::GetColumnInfoICommandWithParameters::GetParameterInfo で報告されます。 

SQL Server データ型

OLE DB データ型

bigint

DBTYPE_I8

binary

DBTYPE_BYTES

bit

DBTYPE_BOOL

char

DBTYPE_STR

datetime

DBTYPE_DBTIMESTAMP

datetime2

DBTYPE_DBTIME2

decimal

DBTYPE_NUMERIC

float

DBTYPE_R8

image

DBTYPE_BYTES

int

DBTYPE_I4

money

DBTYPE_CY

nchar

DBTYPE_WSTR

ntext

DBTYPE_WSTR

numeric

DBTYPE_NUMERIC

nvarchar

DBTYPE_WSTR

real

DBTYPE_R4

smalldatetime

DBTYPE_DBTIMESTAMP

smallint

DBTYPE_I2

smallmoney

DBTYPE_CY

sql_variant

DBTYPE_VARIANT、DBTYPE_SQLVARIANT

sysname

DBTYPE_WSTR

text

DBTYPE_STR

timestamp

DBTYPE_BYTES

tinyint

DBTYPE_UI1

UDT

DBTYPE_UDT

uniqueidentifier

DBTYPE_GUID

varbinary

DBTYPE_BYTES

varchar

DBTYPE_STR

XML

DBTYPE_XML

SQL Server Native Client OLE DB プロバイダーでは、次の図に示すように、コンシューマーが要求するデータ変換をサポートします。

sql_variant オブジェクトは、text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml、timestamp、および Microsoft .NET Framework 共通言語ランタイム (CLR) のユーザー定義型を除く、任意の SQL Server データ型のデータを保持できます。 また、sql_variant データのインスタンスは、その基になる基本データ型として sql_variant を保持できません。 たとえば、一部の行の列に smallint 型の値を格納し、他の行の列に float 型の値を格納して、残りの行の列に char/nchar 型の値を格納できます。

注意

sql_variant データ型は、Microsoft Visual Basic® の Variant データ型や、OLE DB の DBTYPE_VARIANT および DBTYPE_SQLVARIANT に似ています。

sql_variant 型のデータを DBTYPE_VARIANT としてフェッチすると、このデータはバッファーの VARIANT 構造体内に格納されます。 ただし、VARIANT 構造体内のサブタイプは、sql_variant データ型で定義されているサブタイプにマップされない場合があります。 このため、すべてのサブタイプを一致させるには、sql_variant 型のデータを DBTYPE_SQLVARIANT としてフェッチする必要があります。

DBTYPE_SQLVARIANT データ型

SQL Server Native Client OLE DB プロバイダーでは、sql_variant データ型をサポートするために、DBTYPE_SQLVARIANT と呼ばれるプロバイダー固有のデータ型を公開しています。 sql_variant 型のデータを DBTYPE_SQLVARIANT としてフェッチすると、データはプロバイダー固有の SSVARIANT 構造体内に格納されます。 SSVARIANT 構造体には、sql_variant データ型のサブタイプに一致するすべてのサブタイプが含まれています。

また、セッション プロパティ SSPROP_ALLOWNATIVEVARIANT を TRUE に設定する必要もあります。

プロバイダー固有のプロパティ SSPROP_ALLOWNATIVEVARIANT

データをフェッチするときに、列またはパラメーターに返すデータ型を明示的に指定できます。 また、IColumnsInfo を使用して列情報を取得し、その情報をバインドに使用することもできます。 IColumnsInfo を使用してバインド用の列情報を取得するときに、SSPROP_ALLOWNATIVEVARIANT セッション プロパティが FALSE (既定値) の場合、sql_variant 型の列には DBTYPE_VARIANT が返されます。 SSPROP_ALLOWNATIVEVARIANT プロパティが FALSE の場合、DBTYPE_SQLVARIANT はサポートされません。 SSPROP_ALLOWNATIVEVARIANT プロパティを TRUE に設定すると、列の型は DBTYPE_SQLVARIANT として返されます。この場合、バッファーには SSVARIANT 構造体が保持されます。 sql_variant 型のデータを DBTYPE_SQLVARIANT としてフェッチするときは、セッション プロパティ SSPROP_ALLOWNATIVEVARIANT が TRUE に設定されている必要があります。

SSPROP_ALLOWNATIVEVARIANT プロパティはプロバイダー固有の DBPROPSET_SQLSERVERSESSION プロパティ セットの一部であり、セッション プロパティです。

DBTYPE_VARIANT は、他のすべての OLE DB プロバイダーに適用されます。

SSPROP_ALLOWNATIVEVARIANT

SSPROP_ALLOWNATIVEVARIANT はセッション プロパティで、DBPROPSET_SQLSERVERSESSION プロパティ セットの一部です。

SSPROP_ALLOWNATIVEVARIANT

型 : VT_BOOL

R/W: 読み取り/書き込み

既定値 : VARIANT_FALSE

説明 : データを DBTYPE_VARIANT と DBTYPE_SQLVARIANT のどちらとしてフェッチするかを決定します。

VARIANT_TRUE: 列の型は DBTYPE_SQLVARIANT として返され、バッファーには SSVARIANT 構造体が保持されます。

VARIANT_FALSE: 列の型は DBTYPE_VARIANT として返され、バッファーには VARIANT 構造体が保持されます。

関連項目

概念

データ型 (OLE DB)