Поделиться через


Преобразования собственного клиента SQL Server, выполняемые с сервера на клиент

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

В этом разделе описываются преобразования даты и времени, выполняемые между SQL Server 2008 (10.0.x) (или более поздней версии) и клиентским приложением, написанным с помощью OLE DB собственного клиента SQL Server.

Преобразования

В следующей таблице описываются преобразования между типом, возвращенным клиенту, и типом в привязке. Если был вызван метод ICommandWithParameters::SetParameterInfo, но указанны в параметре pwszDataSourceType тип не совпадает с действительным типом на сервере, сервер выполнит неявное преобразование выходного параметра в тип, который указан в методе ICommandWithParameters::SetParameterInfo. Это может привести к непредвиденным результатам преобразования, если правила преобразования сервера отличаются от описанных в этом разделе. Например, если необходимо указать дату по умолчанию, SQL Server использует 1900-1-1, а не 1899-12-30.

В ->

From
DATE DBDATE DBTIME DBTIME2 DBTIMESTAMP DBTIMESTAMPOFFSET FILETIME BYTES VARIANT SSVARIANT BSTR STR WSTR
Дата 1,7 ОК - - 1 1,3 1,7 - OK (VT_BSTR) ОК ОК 4 4
Время 5,6,7 - 9 ОК 6 3,6 5,6 - OK (VT_BSTR) ОК ОК 4 4
Smalldatetime 7 8 9,10 10 ОК 3 7 - 7 (VT_DATE) ОК ОК 4 4
Datetime 5,7 8 9,10 10 ОК 3 7 - 7 (VT_DATE) ОК ОК 4 4
Дата и время2 5,7 8 9,10 10 7 3 5,7 - OK (VT_BSTR) ОК ОК 4 4
Datetimeoffset 5,7,11 8,11 9,10,11 10,11 7,11 ОК 5,7,11 - OK (VT_BSTR) ОК ОК 4 4
Char, Varchar,

Nchar, Nvarchar
7, 13 12 12,9 12 12 12 7,13 Неприменимо Н/Д Н/Д Н/Д Н/Д Неприменимо
Sql_variant

(datetime)
7 8 9,10 10 ОК 3 7 - 7 (VT_DATE) ОК ОК 4 4
Sql_variant

(smalldatetime)
7 8 9,10 10 ОК 3 7 - 7 (VT_DATE) ОК ОК 4 4
Sql_variant

(date)
1,7 ОК 2 2 1 1,3 1,7 - OK (VT_BSTR) ОК ОК 4 4
Sql_variant

(time)
5,6,7 2 6 ОК 6 3,6 5,6 - OK (VT_BSTR) ОК ОК 4 4
Sql_variant

(datetime2)
5,7 8 9,10 10 ОК 3 5,7 - OK (VT_BSTR) ОК ОК 4 4
Sql_variant

(datetimeoffset)
5,7,11 8,11 9,10,11 10,11 7,11 ОК 5,7,11 - OK (VT_BSTR) ОК ОК 4 4

Расшифровка символов

Символ Значение
ОК Никаких преобразований не требуется.
- Преобразование не поддерживается. Если при вызове IAccessor::CreateAccessor осуществляется проверка связывания, то в параметре rgStatus возвращается значение DBBINDSTATUS_UPSUPPORTEDCONVERSION. Если проверка метода доступа является отложенной, то устанавливается значение DBSTATUS_E_BADACCESSOR.
1 Поля времени установлены в нуль.
2 Установлено значение DBSTATUS_E_CANTCONVERTVALUE.
3 Часовой пояс установлен в нуль.
4 Если буфер клиента недостаточно большой, устанавливается значение DBSTATUS_S_TRUNCATED. Если тип сервера включает доли секунд, то число цифр в результирующей строке точно совпадает с масштабом типа сервера.
5 Усечение секунд или долей секунд пропускается.
6 Дата устанавливается в текущую дату, за исключением случая, когда источник является строковым литералом времени, а назначение — DBTYPE_DATE. В этом случае используется дата 1899-12-30.
7 При превышении значения устанавливается значение DBSTATUS_E_DATAOVERFLOW.
8 Поля времени не учитываются.
9 Поля долей секунд пропускаются.
10 Компонент даты не учитывается.
11 Время приводится к часовому поясу клиента. Если во время преобразования происходит ошибка, то устанавливается значение DBSTATUS_E_DATAOVERFLOW.
12 Строка анализируется как литерал ISO и преобразуется в целевой тип. Если попытка оказалась неудачной, то строка анализируется как литерал даты OLE (который также содержит компоненты времени) и преобразуется из даты OLE (DBTYPE_DATE) в целевой тип. Для успешного выполнения синтаксического анализа формата ISO, строка должна соответствовать синтаксису допускаемых литералов целевого типа. Условием успешного синтаксического анализа OLE является соответствие строки синтаксису, распознаваемому OLE. Если не удалось выполнить синтаксический анализ строки, то устанавливается значение DBSTATUS_E_CANTCONVERTVALUE. Если значения каких-либо компонентов выходят за пределы диапазона, то устанавливается значение DBSTATUS_E_DATAOVERFLOW.
13 Строка анализируется как литерал ISO и преобразуется в целевой тип. Если попытка оказалась неудачной, то строка анализируется как литерал даты OLE (который также содержит компоненты времени) и преобразуется из даты OLE (DBTYPE_DATE) в целевой тип. Строка должна соответствовать синтаксису литералов типа datetime, за исключением случаев, когда назначением является DBTYPE_DATE или DBTYPE_DBTIMESTAMP. В этом случае для успешного завершения синтаксического анализа формата ISO допускаются литералы типа datetime или time. Условием успешного синтаксического анализа OLE является соответствие строки синтаксису, распознаваемому OLE. Если не удалось выполнить синтаксический анализ строки, то устанавливается значение DBSTATUS_E_CANTCONVERTVALUE. Если значения каких-либо компонентов выходят за пределы диапазона, то устанавливается значение DBSTATUS_E_DATAOVERFLOW.

См. также

Привязки и преобразования (OLE DB)