Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ODBC本机客户端中获取SQL Server DateTime2字段_Sql_Sql Server_Odbc_Client - Fatal编程技术网

如何在ODBC本机客户端中获取SQL Server DateTime2字段

如何在ODBC本机客户端中获取SQL Server DateTime2字段,sql,sql-server,odbc,client,Sql,Sql Server,Odbc,Client,我有一张如下所示的桌子 CREATE TABLE [dbo].[MyTable]( [tagname] [nvarchar(30)] NOT NULL, [date] [datetime2] NOT NULL ) 我在C++中使用客户端下面的代码来获取标签日期< /p> TIMESTAMP_STRUCT ts; SQLLEN cbhiredate; if (!SQL_SUCCEEDED(SQLGetData(hStmt, 2, SQL_C_TIMESTAMP, &ts,

我有一张如下所示的桌子

CREATE TABLE [dbo].[MyTable](
    [tagname] [nvarchar(30)] NOT NULL,
    [date] [datetime2] NOT NULL
)

我在C++中使用客户端下面的代码来获取标签日期< /p>

TIMESTAMP_STRUCT ts;
SQLLEN cbhiredate;
if (!SQL_SUCCEEDED(SQLGetData(hStmt, 2, SQL_C_TIMESTAMP, &ts, sizeof(TIMESTAMP_STRUCT), &cbhiredate)))
在大多数情况下,它工作正常,但在某些情况下,日期毫秒值正在四舍五入。例如,如果SQL表中的日期值为2020/01/11 17:15:38.6850000,则在使用上述查询进行获取时,客户端代码中的日期值将更改为2020/01/11 17:15:38.686


从SQL server获取数据时是否有任何错误。SQL Server 2012 SP4出现这种情况。

问题在于datetime2数据类型的精度为100ns,而您将该值放入的类型的精度为毫秒

如果实际日期/时间值为2020/01/11 17:15:38.685900,则必须将其四舍五入到.686。如果实际值是.685400,它将四舍五入到.685


如果将数据类型更改为datetime2(3)-它将以毫秒的精度存储在SQL Server中,并且不会对值进行任何舍入。

SQL Server中的确切值为2020/01/11 17:15:38.6850000,因此,从外部客户端提取时,不应对其进行舍入。但它仍然在发生。因此,SQL server或客户端代码可能有问题。如果您完全确定SQL server.6850000中的值,则一定是其他原因导致舍入。我仍然会将SQL Server中的数据类型更改为datetime2(3)-这将精确到毫秒,并避免任何舍入问题。