我喜欢在SQL Server 2008中的新日期的数据类型,但是当我将日期字段比较日期时间字段链接服务器上(SQL 2005,在这种情况下),像这样的:

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.".

“的规模是无效”显然是因为本地客户端传递DATE数据类型回链接服务器,并且因为它是SQL 2005,它不知道该怎么办。运行针对2008年的服务器此相同的查询工作就好了 - SQL Server能够没有问题比较DATE和DATETIME数据类型

我的问题是 - 有一个原因,本机客户端无法自动的“2009-11-09”的日期值转换为一个DATETIME“2009-11-09 00:00:00.000”以便SQL Server的以前的版本将无法在其窒息?

有帮助吗?

解决方案

有日期时间(2005)和日期/时间的内部结构/ DATETIME2 DATETIMEOFFSET(2008)是彼此非常不同,和与其他比较的数据必须进行比较时被放置到相同的类型。因此,本地客户端将被迫做出这样的转换。

本机客户端可能是慷慨,为你做的隐式转换,但同样的,该产品往往工作到应建议,在2005年SQL抛出类型,它本身不明白应该被拒绝“最惊喜的元素” 。有许多细微的错误的,可从一个肯定的滑英寸

同样要(7)2005年SQL扔DATETIME2的真,尽我们预计它会四舍五入的100ns的精度回3.33ms或扔错 - 我宁愿错误并做出/接受显式转换。

其他提示

我只能猜测,这是因为2009-11-09 00:00:00.000并不时区 - 中性,会比较微妙的错误的原因。如果我错了请纠正我。

可以通过使用实现了这个 ALTER SESSION SET NLS_DATE_FORMAT = 'MM / DD / YYYY HH:MI:SS AM';这是temproray溶液,如果宇正在对UNIX然后这些设置可以在.profile中永久地进行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top