SQL Server:从 2008 年到 2014 年:-数据类型日期时间和时间在添加运算符中不兼容。还有其他解决办法吗?

Mha*_*nis 5 sql datetime sql-server-2008 sqlmigrations sql-server-2014

我正在从 SQL Server 2008 迁移到 2014,但出现错误

数据类型 datetime 和 time 在 add 运算符中不兼容。

我想出了将时间转换为 DateTime 的解决方案,但我对许多存储过程和视图进行了更改。

上述问题还有其他解决方案吗?

Ale*_*lex 4

如果您希望升级到 SQL2014,除了重构代码之外没有其他解决方案。下面的示例演示了将兼容性级别设置为 2008 并不能解决此错误。您将必须修改所有存储过程和视图。

ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = 100
GO
--DOESNOT WORK IN 2012 
DECLARE @ESTRecords TABLE
    (
     ESTime TIME(7) NOT NULL ,
     ESTDate DATE NOT NULL ,
     ESTDateTime AS ( CONVERT(DATETIME, ESTDate, ( 108 )) + ESTime )
       PERSISTED
    )

INSERT  INTO @ESTRecords
       ( ESTime, ESTDate )
VALUES  ( '12:00 PM', '12/31/2012' )

SELECT  *
FROM       @ESTRecords
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是表变量的一个怪癖。对于永久表或诸如“SELECT CAST(GETDATE() AS date) + GETDATE()”之类的表达式,兼容性级别有效。可能表变量会影响 tempdb 的兼容性 (2认同)