语句在SQL2000、2005上执行都没有问题,结果发现是SQL Server数据库的兼容级别导致,由于现在是SQL2012,不能设置为80,怎么各位高手怎么解决哦,谢谢
SELECT name ,compatibility_level ,recovery_model_desc FROM sys.databases WITH(NOLOCK) --查询显示是90
EXEC sp_dbcmptlevel 数据库,80 --在SQL2012直接这样执行有问题么?
ORDER BY 后面应该是加上字段名,也就是你要排序的字段。DESC表示排序从大到小。如果不想排序,就把ORDER BY DESC 这段去掉。
EXEC sp_dbcmptlevel 数据库,80表示的是把数据库的兼容级别调整到80,也就是兼容sqlserver2000的语法(一些语法规则已经被高版本的sqlserver摒弃,调整兼容级别可以让高版本的sqlserver兼容低版本的语法)。在sqlserver2012里这么执行也是没问题的。
追问这是系统里自带的语法,由于不想升级系统,所以只想在数据库里更新,但是在SQL2012里没有看到 SQL2000的80值。如果直接用命令执行有用么?因为客户数据库比大,以免出问题。
追答理论上来说执行命令是没问题的,这个命令就是调整兼容性的。
追问但是执行不了哦,请问有没别的办法?
(9 行受影响)
消息 15416,级别 16,状态 1,过程 sp_dbcmptlevel,第 66 行
用法: sp_dbcmptlevel [dbname [, compatibilitylevel]]
数据库兼容级别的有效值为 90、100 或 110。
嗯,查了一下,2012兼容性最低就到90,所以只能设置成90看看了
追问90试过了,也是兼容不了
追答那没办法啦,要么不要升级到2012(可以到2008),要么把报错的sql都改一遍。
追问2008的也不行,一样出会错,除非把2008的兼容性改成80才可以,现在问题是这个语句是系统直接跟踪出来的,而且客户又安装的是SQL 2012,好无语。
追答对啊,2008可以改成80,2012没办法改。