メタデータ - パラメーターと行セット
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
この記事では、OLE DB の日付および時刻の機能強化に関連する、次の型と型メンバーについて説明します。
DBBINDING 構造体
ICommandWithParameters::GetParameterInfo
ICommandWithParameters::SetParameterInfo
IColumnsRowset::GetColumnsRowset
IColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
prgParamInfo を使用して DBPARAMINFO 構造体に次の情報が返されます。
パラメーターの型 | wType | ulParamSize | bPrecision | bScale | dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date | DBTYPE_DBDATE | 6 | 10 | 0 | Clear |
time | DBTYPE_DBTIME2 | 10 | 8、10..16 | 0..7 | オン |
smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 | Clear |
DATETIME | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | Clear |
datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19、21..27 | 0..7 | オン |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26、28..34 | 0..7 | オン |
場合によっては、値の範囲が連続していないことに注意してください。 有効桁数が 0 より大きい場合は、小数点が追加されるためです。
DBPARAMFLAGS_SS_ISVARIABLESCALE は、SQL Server 2008 (10.0.x) 以降のバージョンを実行しているサーバーに接続されている場合にのみ有効です。 下位レベルのサーバーに接続されている場合は、DBPARAMFLAGS_SS_ISVARIABLESCALE は設定されません。
ICommandWithParameters::SetParameterInfo と暗黙のパラメーターの型
DBPARAMBINDINFO 構造体で提供される情報は、次の表に準拠する必要があります。
pwszDataSourceType (プロバイダー固有) |
pwszDataSourceType (OLE DB 汎用) |
ulParamSize | bScale |
---|---|---|---|
DBTYPE_DATE | 6 | 無視 | |
date | DBTYPE_DBDATE | 6 | 無視 |
DBTYPE_DBTIME | 10 | 無視 | |
time | DBTYPE_DBTIME2 | 10 | 0..7 |
smalldatetime | 16 | 無視 | |
DATETIME | 16 | 無視 | |
datetime2 または DBTYPE_DBTIMESTAMP | DBTYPE_DBTIMESTAMP | 16 | 0..7 |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 0..7 |
bPrecision パラメーターは無視されます。
データをサーバーに送信する場合、"DBPARAMFLAGS_SS_ISVARIABLESCALE" は無視されます。 アプリケーションでは、プロバイダー固有の型名 "datetime" および "smalldatetime" を使用して、従来の表形式のデータ ストリーム (TDS) の型を強制的に使用することができます。 SQL Server 2008 (10.0.x) 以降のバージョンを実行しているサーバーに接続されている場合、"datetime2" 形式が使用され、型名が "datetime2" または "DBTYPE_DBTIMESTAMP" の場合は、必要に応じて、暗黙的なサーバー変換が発生します。 プロバイダー固有の型名に "datetime" または "smalldatetime" が使用されている場合は、bScale が無視されます。 それ以外の場合は、アプリケーションで bScale が正しく設定されるようにする必要があります。 MDAC からアップグレードされたアプリケーション、および "DBTYPE_DBTIMESTAMP" を使用する SQL Server 2005 (9.x) からアップグレードされた OLE DB Driver for SQL Server は、bScale が正しく設定されていないと失敗します。 SQL Server 2008 (10.0.x) より前のサーバー インスタンスに接続されている場合は、"DBTYPE_DBTIMESTAMP" で 0 または 3 以外に設定された bScale の値はエラーになり、E_FAIL が返されます。
ICommandWithParameters::SetParameterInfo が呼び出されない場合、プロバイダーは、次のように、IAccessor::CreateAccessor で指定されたバインドの種類を基にサーバーの種類を示します。
バインドの種類 | pwszDataSourceType (プロバイダー固有) |
---|---|
DBTYPE_DATE | datetime2(0) |
DBTYPE_DBDATE | date |
DBTYPE_DBTIME | time(0) |
DBTYPE_DBTIME2 | time(7) |
DBTYPE_DBTIMESTAMP | datetime2(7) |
DBTYPE_DBTIMESTAMPOFFSET | datetimeoffset(7) |
IColumnsRowset::GetColumnsRowset
IColumnsRowset::GetColumnsRowset は次の列を返します。
列の型 | DBCOLUMN_TYPE | DBCOLUM_COLUMNSIZE | DBCOLUMN_PRECISION | DBCOLUMN_SCALE、DBCOLUMN_DATETIMEPRECISION | DBCOLUMN_FLAGS、DBCOLUMNFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date | DBTYPE_DBDATE | 6 | 10 | 0 | Clear |
time | DBTYPE_DBTIME2 | 10 | 8、10..16 | 0..7 | オン |
smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 | Clear |
DATETIME | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | Clear |
datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19、21..27 | 0..7 | オン |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26、28..34 | 0..7 | オン |
DBCOLUMN_FLAGS では、DBCOLUMNFLAGS_ISFIXEDLENGTH は日付/時刻型に対して常に true になり、次のフラグは常に false になります。
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER
DBCOLUMNFLAGS_MAYDEFER
その他のフラグ (DBCOLUMNFLAGS_ISNULLABLE、DBCOLUMNFLAGS_MAYBENULL、DBCOLUMNFLAGS_WRITE、および DBCOLUMNFLAGS_WRITEUNKNOWN) は、列の定義方法と実際のクエリに応じて設定できます。
DBCOLUMN_FLAGS に用意されている新しいフラグ DBCOLUMNFLAGS_SS_ISVARIABLESCALE を使用すると、アプリケーションは、DBCOLUMN_TYPE が DBTYPE_DBTIMESTAMP である列のサーバーの種類を判断できます。 サーバーの種類を識別するには、DBCOLUMN_SCALE または DBCOLUMN_DATETIMEPRECISION も使用する必要があります。
DBCOLUMNFLAGS_SS_ISVARIABLESCALE は、SQL Server 2008 (10.0.x) 以降のバージョンを実行しているサーバーに接続されている場合にのみ有効です。 下位レベルのサーバーに接続されている場合、DBCOLUMNFLAGS_SS_ISVARIABLESCALE は未定義となります。
IColumnsInfo::GetColumnInfo
DBCOLUMNINFO 構造体から次の情報が返されます。
パラメーターの型 | wType | ulColumnSize | bPrecision | bScale | dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date | DBTYPE_DBDATE | 6 | 10 | 0 | Clear |
time(1..7) | DBTYPE_DBTIME2 | 10 | 8、10..16 | 0..7 | オン |
smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 | Clear |
DATETIME | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | Clear |
datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19、21..27 | 0..7 | オン |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26、28..34 | 0..7 | オン |
dwFlags では、DBCOLUMNFLAGS_ISFIXEDLENGTH は日付/時刻型に対して常に true になり、次のフラグは常に false になります。
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER、MAYDEFER
その他のフラグ (DBCOLUMNFLAGS_ISNULLABLE、DBCOLUMNFLAGS_MAYBENULL、DBCOLUMNFLAGS_WRITE、および DBCOLUMNFLAGS_WRITEUNKNOWN) は、設定することができます。
dwFlags に用意されている新しいフラグ DBCOLUMNFLAGS_SS_ISVARIABLESCALE を使用すると、アプリケーションは、wType が DBTYPE_DBTIMESTAMP である列のサーバーの種類を判断できます。 サーバーの種類を識別するには、bScale も使用する必要があります。