SQL Server:从2008年到2014年:-数据类型datetime和time在add运算符中不兼容。还有其他解决办法吗?

SQL Server:从2008年到2014年:-数据类型datetime和time在add运算符中不兼容。还有其他解决办法吗?,sql,sql-server-2008,datetime,sql-server-2014,sqlmigrations,Sql,Sql Server 2008,Datetime,Sql Server 2014,Sqlmigrations,我正在从SQL Server 2008迁移到2014,出现了一个错误 数据类型datetime和time在add运算符中不兼容 我找到了将时间转换为日期时间的解决方案,但我在许多存储过程和视图中进行了更改 ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = 100 GO --DOESNOT WORK IN 2012 DECLARE @ESTRecords TABLE ( ESTime TIME(7) NOT NULL

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

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

我找到了将时间转换为日期时间的解决方案,但我在许多存储过程和视图中进行了更改

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

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

如果您希望升级到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

你能给我们看一些关于你的问题的示例代码吗?当你把兼容模式改回2008年时,它能工作吗
alterdatabase\u name SET COMPATIBILITY\u LEVEL 100
这似乎是表变量的一个怪癖。对于永久性表或表达式,如
选择CAST(GETDATE()AS date)+GETDATE()
兼容级别有效。表变量可能与tempdb的compat无关