我们在SQL Server 2008(不是SP2-不要问我为什么)数据库服务器上有四个不同的数据库,它们都有一个奇怪的问题。
从sys.databases
中列出时,这些数据库报告其兼容性为SQL Server 2008 / R2(兼容性级别100),如以下三个数据库所示:
MyDB_Name 100 SQL Server 2008/R2
MyDB_Name_MirrorTables 100 SQL Server 2008/R2
MyDB_Name_Reporting 100 SQL Server 2008/R2
此查询的输出:
select
name, compatibility_level , version_name =
case compatibility_level
when 90 then 'SQL Server 2005'
when 100 then 'SQL Server 2008/R2'
when 110 then 'SQL Server 2012'
else 'unknown - ' + convert(varchar(10), compatibility_level)
end
from sys.databases
从服务器上其他用户DB的备份还原可正确还原为兼容性级别100。但是,从备份中恢复这四个DB则还原为兼容性级别90(SQL Server 2005)。只有这四个DB似乎有此问题。
要对此进行测试,我仅使用指定的INIT, SKIP
手动备份了其中一个数据库。然后,我将此备份还原到SQL Server 2012服务器。恢复后,数据库就经历了从版本655到706的升级过程。没有其他异常。
但是,在使用上面相同的代码在SQL Server 2012上测试兼容性级别时,这是返回的值:
bwh_MyDB_Name_MirrorTables 90 SQL Server 2005
此外,当以不同的名称还原到原始SQL Server 2008 DB服务器时,数据库仍会为该数据库版本返回SQL Server 2005(兼容级别90)。
最后,尽管数据库报告为SQL Servre 2008,但从DB2链接服务器返回日期列时,查询将返回datetime
(时间为00:00:00.000)。在SQL Server 2012中运行查询,该值以Date
数据类型返回,这是在SQL Server 2008 / R2数据库中应返回的值。
我茫然不知所措。日期/日期时间问题是引发此问题的最初诱因,但它已经成为一个更大的难题。显然,我可以简单地将传入的数据作为date
值进行转换(确实有效,很奇怪),但是这并不能解释RESTORE将数据库返回兼容级别90,或者DB2查询返回了日期时间。来自链接服务器的日期。任何建议都会很高兴被接受。