【问题标题】:The fractional seconds precision issue with PowerBuilder and SQL server 2016PowerBuilder 和 SQL Server 2016 的小数秒精度问题
【发布时间】:2017-04-26 09:31:36
【问题描述】:

我有一个简单的存储过程来返回日期时间。例如:

create procedure sp_get_date (@db_date datetime output)as begin      select @db_date ='2017-04-26 13:20:32.313' end 

并使用 SQLNCLI11 本地客户端与 PowerBuilder 应用程序内的数据库一起工作。

DECLARE get_date_proc PROCEDURE for dbo.sp_get_date @db_date = :dt_today output using sqlca;
EXECUTE get_date_proc;
FETCH get_date_proc INTO :dt_today;
t_now = time(dt_today)

t_now 的预期结果是“13:20:32.313000

使用 SQL server 2014 时,t_now 值正确,为 13:20:32。313000

但使用 SQL Server 2016,该值为 13:20:3133333

这是本机客户端库与 SQL Server 2016 一起使用的问题吗?存储过程是否返回datatime2值?

非常感谢。

【问题讨论】:

  • 见 DanGuzman 评论
  • 是的,我可以换到120级。但还是不明白根本原因。上述存储过程是否在 SQL Server 2016 中返回 DATETIME2 值而不是 DATETIME?
  • 您一定是数据类型不匹配,导致精度更高
  • 我不确定 powerbuilder,但原因很清楚,有些地方您/应用程序正在从 datetime 转换为 datetime2

标签: sql-server powerbuilder


【解决方案1】:

您似乎遇到了这个 sql server 错误 (https://connect.microsoft.com/SQLServer/Feedback/Details/2805477)。因此,似乎最好的方法可能是将参数的数据类型转换为 datetime2。或者,在您的 PB 应用程序中将该过程实现为 RPC 可能会有所帮助;我真的不能说这是否有任何作用,因为我仍在使用 ss 2012。

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多