SQL Server:从2008年到2014年:-数据类型datetime和time在add运算符中不兼容。还有其他解决办法吗?
我正在从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
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无关