我们有一些SQL服务器。不同的版本,即2005年,2008年,2012年,2014年。(我们计划很快离开2005年)。 很多时候,我们的DBA只会备份和恢复一个"模板"客户数据库创建一个" new"已恢复模板中的数据库。
问题是恢复后兼容级别有时为80(或90)。 对于新的SQL功能,我们的新SQL脚本至少要求90级。
所以,我写了一个脚本,它将检查Context
数据库兼容级别并调整该服务器上的目标客户端数据库。
master
我的问题是,这种方法是否正确?我应该检查DECLARE @sys_compatibility_level tinyint, @db_compatibility_level tinyint;
SELECT @sys_compatibility_level = compatibility_level
FROM sys.databases
WHERE name = 'master';
SELECT @db_compatibility_level = compatibility_level
FROM sys.databases
WHERE name = DB_NAME();
DECLARE @db_name nvarchar(128) = DB_NAME();
IF @db_compatibility_level < @sys_compatibility_level
BEGIN
-- EXEC dbo.sp_dbcmptlevel @dbname=@db_name, @new_cmptlevel=@sys_compatibility_level -- deprecated
EXEC('ALTER DATABASE ' + @db_name + ' SET COMPATIBILITY_LEVEL = ' + @sys_compatibility_level)
END
db还是master
db?盲目地将客户端数据库设置为主/模型的存在缺点吗?
答案 0 :(得分:1)
由于您正在恢复数据库,因此它们保留了旧的兼容性级别。新创建的数据库将继承模型数据库的兼容性级别。
所以将恢复数据库的兼容性级别更改为您希望的级别,而不是基于型号/母版..
将模型数据库兼容性级别更改为您选择的级别,因此新的将继承