Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
azure Synapse Analytics Analytics
Platform System (PDW)
В статье описываются новые возможности даты-времени для поддержки операций массового копирования в OLE DB Driver for SQL Server.
Файлы форматирования
При интерактивном построении файлов форматирования следующая таблица описывает вводные данные для задания типов даты-времени и соответствующих имен типов данных из файлов размещения.
Тип файла хранилища | Тип данных файла | Ответ на запрос: "Введите тип хранения файлов для поля >имя_поля< [<default>]:" |
---|---|---|
Datetime | SQLDATETIME | d |
Smalldatetime | SQLDATETIM4 | D |
Дата | SQLDATE | de |
Время | SQLTIME | te |
Дата и время2 | SQLDATETIME2 | d2 |
Datetimeoffset | SQLDATETIMEOFFSET | do |
XSD для XML-файла форматирования будет содержать следующие дополнительные данные:
<xs:complexType name="SQLDATETIME2">
<xs:complexContent>
<xs:extension base="bl:Fixed"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SQLDATETIMEOFFSET">
<xs:complexContent>
<xs:extension base="bl:Fixed"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SQLDATE">
<xs:complexContent>
<xs:extension base="bl:Fixed"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SQLTIME">
<xs:complexContent>
<xs:extension base="bl:Fixed"/>
</xs:complexContent>
</xs:complexType>
Файлы символьных данных
В файлах данных символов значения даты и времени представлены, как описано в разделе "Форматы данных: строки и литералы" поддержки типов данных для улучшения даты и времени OLE DB для OLE DB.
В собственных файлах данных значения даты и времени для четырех новых типов представлены в виде их представлений TDS с масштабом 7 (так как это максимальное значение, поддерживаемое SQL Server и файлами данных bcp, не сохраняет масштаб этих столбцов). В хранении существующих типов datetime и smalldatetime, а также их представлений в виде потоков табличных данных (TDS) изменений нет.
Размеры типов OLE DB для различных типов хранения следующие:
Тип файла хранилища | Объем памяти в байтах |
---|---|
datetime | 8 |
smalldatetime | 4 |
Дата | 3 |
Время | 6 |
datetime2 | 9 |
datetimeoffset | 11 |
Типы BCP в msoledbsql.h
В msoledbsql.h определены следующие типы. Эти типы передаются с помощью параметра eUserDataType IBCPSession::BCPColFmt в OLE DB.
Тип файла хранилища | Тип данных файла | Введите msoledbsql.h для использования с IBCPSession::BCPColFmt | Значение |
---|---|---|---|
Datetime | SQLDATETIME | BCP_TYPE_SQLDATETIME | 0x3d |
Smalldatetime | SQLDATETIM4 | BCP_TYPE_SQLDATETIM4 | 0x3a |
Дата | SQLDATE | BCP_TYPE_SQLDATE | 0x28 |
Время | SQLTIME | BCP_TYPE_SQLTIME | 0x29 |
Дата и время2 | SQLDATETIME2 | BCP_TYPE_SQLDATETIME2 | 0x2a |
Datetimeoffset | SQLDATETIMEOFFSET | BCP_TYPE_SQLDATETIMEOFFSET | 0x2b |
Поддерживаемые преобразования типов данных BCP
Сведения о преобразованиях приведены в следующих таблицах.
Примечание для OLE DB. Следующие преобразования выполняются через интерфейс IBCPSession. IRowsetFastLoad использует преобразования OLE DB, как определено в статье Conversions Performed from Client to Server (Преобразования, выполняемые при передаче от клиента к серверу). Следует заметить, что значения даты-времени округляются до 1/300 секунды, а в значениях типа smalldatetime после выполнения клиентских преобразований, описанных ниже, значение секунд становится равным нулю. Округление даты-времени распространяется на часы и минуты, но не на дату.
До --> From |
Дата | Время | smalldatetime | datetime | datetime2 | datetimeoffset | char | wchar |
---|---|---|---|---|---|---|---|---|
Дата | 1 | - | 1, 6 | 1, 6 | 1, 6 | 1, 5, 6 | 1, 3 | 1, 3 |
Время | Н/П | 1, 10 | 1, 7, 10 | 1, 7, 10 | 1, 7, 10 | 1, 5, 7, 10 | 1, 3 | 1, 3 |
Smalldatetime | 1, 2 | 1, 4, 10 | 1 | 1 | 1, 10 | 1, 5, 10 | 1, 11 | 1, 11 |
Datetime | 1, 2 | 1, 4, 10 | 1, 12 | 1 | 1, 10 | 1, 5, 10 | 1, 11 | 1, 11 |
Дата и время2 | 1, 2 | 1, 4, 10 | 1, 12 | 1, 10 | 1, 10 | 1, 5, 10 | 1, 3 | 1, 3 |
Datetimeoffset | 1, 2, 8 | 1, 4, 8, 10 | 1, 8, 10 | 1, 8, 10 | 1, 8, 10 | 1, 10 | 1, 3 | 1, 3 |
Char/wchar (date) | 9 | - | 9, 6, 12 | 9, 6, 12 | 9, 6 | 9, 5, 6 | Неприменимо | Неприменимо |
Char/wchar (time) | - | 9, 10 | 9, 7, 10, 12 | 9, 7, 10, 12 | 9, 7, 10 | 9, 5, 7, 10 | Неприменимо | Неприменимо |
Char/wchar (datetime) | 9, 2 | 9, 4, 10 | 9, 10, 12 | 9, 10, 12 | 9, 10 | 9, 5, 10 | Неприменимо | Неприменимо |
Char/wchar (datetimeoffset) | 9, 2, 8 | 9, 4, 8, 10 | 9, 8, 10, 12 | 9, 8, 10, 12 | 9, 8, 10 | 9, 10 | Неприменимо | Неприменимо |
Расшифровка символов
Символ | Значение |
---|---|
- | Преобразование не поддерживается. |
1 | Если предоставленные данные недействительны, происходит ошибка. Для значений типа datetimeoffset после преобразования в формате UTC временная часть должна находиться в пределах диапазона, даже если преобразование в формате UTC не требуется. Это требование вызвано тем, что поток табличных данных и сервер всегда нормализуют время в значениях типа datetimeoffset для времени в формате UTC. Поэтому клиент должен проверить, попадают ли в поддерживаемый диапазон компоненты времени после преобразования в UTC. |
2 | Компонент времени не учитывается. |
3 | Если происходит усечение с потерей данных, выводится сообщение об ошибке. Для типа datetime2 число разрядов для дробной секунды (масштаб) определяется размером целевого столбца согласно следующей таблице. Для размеров столбцов, превышающих диапазон таблицы, подразумевается масштаб 9. Это преобразование позволяет передавать доли секунд с точностью до девяти значащих цифр — максимум, поддерживаемый OLE DB. Тип: DBTIME2 Подразумеваемый масштаб 0 8 Подразумеваемый масштаб 1..9 1..9 Тип: DBTIMESTAMP Подразумеваемый масштаб 0: 19 Подразумеваемый масштаб 1..9: 21..29 Тип: DBTIMESTAMPOFFSET Подразумеваемый масштаб 0: 26 Подразумеваемый масштаб 1..9: 28..36 |
4 | Компонент даты не учитывается. |
5 | Часовой пояс устанавливается в формате UTC (например, 00:00). |
6 | Время установлено в нуль. |
7 | Для даты задается значение 1900-01-01. |
8 | Сдвиг часового пояса не учитывается. |
9 | Строка проходит синтаксический анализ и преобразуется в значение типа date, datetime, datetimeoffset или time в зависимости от первого встреченного знака препинания и наличия остальных компонентов. Затем строка преобразуется в целевой тип согласно правилам, описанным в таблице, приведенной в конце статьи, для типа исходных данных, который выясняется в процессе анализа. Если при синтаксическом анализе данных неизбежно возникает ошибка, любой из компонентов вышел за пределы допустимого диапазона или не существует преобразования из литерального типа в целевой тип, возникает ошибка. Для параметров datetime и smalldatetime публикуется ошибка, если год находится за пределами диапазона, поддерживаемого этими типами. Значение datetimeoffset после преобразования во времени в формате UTC должно находиться в пределах диапазона, даже если преобразование во времени в формате UTC не требуется. Причина этого заключается в том, что поток табличных данных и сервер всегда нормализуют время в значениях datetimeoffset для времени в формате UTC, поэтому клиент должен проверять, что значение времени после преобразования во времени в формате UTC находится в пределах поддерживаемого диапазона. Если значение не находится в поддерживаемом диапазоне UTC, возникает ошибка. |
10 | Для преобразований, выполняемых при передаче от клиента серверу, сообщение об ошибке выдается, если происходит усечение с потерей данных. Эта ошибка также возникает в том случае, если значение выходит за пределы диапазона, который может быть представлен диапазоном времени в формате UTC, используемым сервером. Если в преобразовании с сервера на клиент происходит усечение секунд или долей секунд, выдается только предупреждение. |
11 | Для преобразований, выполняемых при передаче от клиента серверу, сообщение об ошибке выдается, если происходит усечение с потерей данных. |
12 | Для секунд устанавливается значение 0, а доли секунды отбрасываются. Ошибка усечения невозможна. |
Н/П | Существующее поведение SQL Server 2005 (9.x) и более раннее поведение поддерживается. |