SQL Server Native Client 日期和时间改进
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) 未随附:
- SQL Server 2022 (16.x) 及更高版本
- SQL Server Management Studio 19 及更高版本
不建议使用 SQL Server Native Client(SQLNCLI 或 SQLNCLI11)和旧的 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)进行新的应用程序开发。
对于新项目,请使用以下驱动程序之一:
对于作为 SQL Server 数据库引擎组件(版本 2012 到 2019)随附的 SQLNCLI,请参阅此支持生命周期特例。
本主题介绍 SQL Server 2008(10.0.x)中添加的日期和时间数据类型的 SQL Server Native Client 支持。
有关日期/时间改进的详细信息,请参阅日期和时间改进(OLE DB)和日期和时间改进 (ODBC)。
使用情况
以下各节介绍使用新的日期和时间类型的各种方法。
将日期用作非重复数据类型
从 SQL Server 2008(10.0.x 开始),对日期/时间类型的增强支持可以更高效地使用 SQL_TYPE_DATE ODBC 类型(ODBC 2.0 应用程序的SQL_DATE),以及 DBTYPE_DBDATE OLE DB 类型。
将时间用作非重复数据类型
OLE DB 已具有一种只包含时间的数据类型 DBTYPE_DBTIME,它的精度为 1 秒。 在 ODBC 中,等效类型为 SQL_TYPE_TIME(对于 ODBC 2.0 应用程序为 SQL_TIME)。
新的 SQL Server 时间数据类型具有秒的小数形式,其准确度可达 100 纳秒。 这需要 SQL Server Native Client 中的新类型:DBTYPE_DBTIME2(OLE DB)和SQL_SS_TIME2(ODBC)。 已编写的所用时间不带秒的小数部分的现有应用程序可以使用 time(0) 列。 现有的 OLE DB DBTYPE_TIME 和 ODBC SQL_TYPE_TIME 类型及其对应的结构应正常工作,除非应用程序依赖于元数据中返回的类型。
将具有扩展的秒的小数部分精度的时间用作非重复数据类型
某些应用程序(如过程控制和生产应用程序)要求能够处理精度高达 100 纳秒的时间数据。 可满足这一用途的新类型为 DBTYPE_DBTIME2 (OLE DB) 和 SQL_SS_TIME2 (ODBC)。
使用具有扩展的秒的小数部分精度的日期时间
OLE DB 已定义了一个精度高达 1 纳秒的类型。 但是,此类型已由现有的 SQL Server 应用程序使用,并且此类应用程序预计只需 1/300 秒精度。 新的 datetime2(3) 类型与现有的日期时间类型不直接兼容 。 如果这一点将影响应用程序行为而导致风险,则应用程序必须使用新的 DBCOLUMN 标志以确定实际的服务器类型。
ODBC 还定义了一个精度高达 1 纳秒的类型。 但是,现有 SQL Server 应用程序已使用此类型,此类应用程序仅需要 3 毫秒精度。 新的 datetime2(3) 类型与现有 日期时间 类型不兼容。 datetime2(3) 的精度为 1 毫秒, 日期时间 的精度为 1/300 秒。 在 ODBC 中,应用程序可以确定哪一个服务器类型用于描述符字段 SQL_DESC_TYPE_NAME。 因此,现有类型 SQL_TYPE_TIMESTAMP(对于 ODBC 2.0 应用程序为 SQL_TIMESTAMP)可用于这两个类型。
使用具有扩展的秒的小数部分精度和时区的日期时间
一些应用程序要求带有时区信息的日期时间值。 新的 DBTYPE_DBTIMESTAMPOFFSET (OLE DB) 和 SQL_SS_TIMESTAMPOFFSET (ODBC) 类型支持这一要求。
将 Date/Time/Datetime/Datetimeoffset 数据用于与现有转换一致的客户端转换
ODBC 标准描述了如何在现有的日期、时间和时间戳类型之间进行转换。 这些扩展方式一致,包括 SQL Server 2008(10.0.x)中引入的所有日期和时间类型之间的转换。