gpt4 book ai didi

sql-server - 为什么 SQL Server 不自动将 DATE 上转换为 DATETIME 以进行比较?

转载 作者:行者123 更新时间:2023-12-03 02:50:54 26 4
gpt4 key购买 nike

我喜欢 SQL Server 2008 中的新 DATE 数据类型,但是当我将 DATE 字段与链接服务器(在本例中为 SQL 2005)上的 DATETIME 字段进行比较时,如下所示:

DECLARE @MyDate DATE
SET @MyDate = CONVERT(DATE, GETDATE())

SELECT *
FROM MySQL2005LinkedServer.SomeDB.dbo.SomeTable
WHERE SomeDatetimeField < @MyDate

我收到此错误:

OLE DB provider "SQLNCLI10" returned message "Unspecified error".
OLE DB provider "SQLNCLI10" returned message "The scale is invalid.".

“比例无效”显然是因为 native 客户端将 DATE 数据类型传递回链接服务器,并且由于它是 SQL 2005,因此它不知道如何处理它。对 2008 服务器运行相同的查询效果很好 - SQL Server 能够毫无问题地比较 DATE 和 DATETIME 数据类型。

这是我的问题 - Native Client 是否有原因不会自动将“2009-11-09”的 DATE 值转换为“2009-11-09 00:00:00.000”的 DATETIME这样以前版本的 SQL Server 就不会卡住了?

最佳答案

datetime (2005) 和 date/time/datetime2 datetimeoffset (2008) 的内部结构彼此非常不同,并且与其他比较一样,在比较时数据必须放入相同的类型。因此 native 客户端将被迫进行这样的转换。

native 客户端可能会很慷慨,为您执行隐式转换,但同样,产品倾向于工作的“最不令人惊讶的元素”应该建议拒绝在 SQL 2005 中抛出它 native 无法理解的类型。肯定会出现许多细微的错误。

在 SQL 2005 中抛出 datetime2(7) 也应该如此,我们是否期望它将 100ns 精度四舍五入到 3.33ms 或抛出并错误 - 我更喜欢错误并生成/接受一个显式转换。

关于sql-server - 为什么 SQL Server 不自动将 DATE 上转换为 DATETIME 以进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1701311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com