Метаданные — параметры и наборы строк
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)
В этой статье приведены сведения о следующем типе и элементах типа, связанных с усовершенствованиями даты и времени OLE DB.
Структура DBBINDING
ICommandWithParameters::GetParameterInfo
ICommandWithParameters::SetParameterInfo
IColumnsRowset::GetColumnsRowset
IColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
Следующие сведения возвращаются в структуре DBPARAMINFO с помощью prgParamInfo:
Тип параметра | wType | ulParamSize | bPrecision | bScale | dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
Дата | DBTYPE_DBDATE | 6 | 10 | 0 | Clear |
Время | DBTYPE_DBTIME2 | 10 | 8, 10..16 | 0..7 | Set |
smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 | Clear |
datetime | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | Clear |
datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19, 21..27 | 0..7 | Set |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26, 28..34 | 0..7 | Set |
Обратите внимание, что в некоторых случаях диапазоны значений не являются непрерывными. Это следствие добавления десятичной запятой, когда точность в долях секунды выше нуля.
DBPARAMFLAGS_SS_ISVARIABLESCALE допустимо только при подключении к серверу под управлением SQL Server 2008 (10.0.x) и более поздних версий. DBPARAMFLAGS_SS_ISVARIABLESCALE никогда не задается при соединении с серверами низкого уровня.
Метод ICommandWithParameters::SetParameterInfo и неявные типы параметров
Сведения, предоставленные в структуре DBPARAMBINDINFO, должны соответствовать следующим требованиям.
pwszDataSourceType (зависит от поставщика) |
pwszDataSourceType (OLE DB, обычный) |
ulParamSize | bScale |
---|---|---|---|
DBTYPE_DATE | 6 | Пропущено | |
Дата | DBTYPE_DBDATE | 6 | Пропущено |
DBTYPE_DBTIME | 10 | Пропущено | |
Время | 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", характерных для поставщика. При подключении к серверам под управлением SQL Server 2008 (10.0.x) и более поздних версий будет использоваться формат datetime2, а при необходимости произойдет неявное преобразование сервера, когда имя типа — datetime2 или DBTYPE_DBTIMESTAMP. Параметр bScale не учитывается, если используются имена типов "datetime" или "smalldatetime" для конкретного поставщика. В противном случае приложения должны следить за правильностью значений bScale. Приложения, обновленные с MDAC и OLE DB Driver for SQL Server из SQL Server 2005 (9.x), которые используют "DBTYPE_DBTIMESTAMP", завершаются ошибкой, если они не заданы правильно. При подключении к экземплярам сервера, предшествующим SQL Server 2008 (10.0.x), значение bScale, отличное от 0 или 3 с "DBTYPE_DBTIMESTAMP", является ошибкой и E_FAIL будет возвращено.
Если ICommandWithParameters::SetParameterInfo не вызывается, поставщик выводит тип сервера по типу привязки, который указан в IAccessor::CreateAccessor, как описано ниже.
Тип привязки | pwszDataSourceType (зависит от поставщика) |
---|---|
DBTYPE_DATE | datetime2(0) |
DBTYPE_DBDATE | Дата |
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 |
---|---|---|---|---|---|
Дата | DBTYPE_DBDATE | 6 | 10 | 0 | Clear |
Время | DBTYPE_DBTIME2 | 10 | 8, 10..16 | 0..7 | Set |
smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 | Clear |
datetime | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | Clear |
datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19, 21..27 | 0..7 | Set |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26, 28..34 | 0..7 | Set |
В 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 |
---|---|---|---|---|---|
Дата | DBTYPE_DBDATE | 6 | 10 | 0 | Clear |
time(1..7) | DBTYPE_DBTIME2 | 10 | 8, 10..16 | 0..7 | Set |
smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 | Clear |
datetime | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | Clear |
datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19, 21..27 | 0..7 | Set |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26, 28..34 | 0..7 | Set |
В 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.