我们有一些 SQL 服务器。使用不同的版本,即 2005、2008、2012、2014。(我们计划很快离开 2005)。很多时候,我们的 DBA 将简单地备份和恢复“模板”客户端数据库,以从恢复的模板创建“新”数据库。
问题是恢复后的兼容性级别有时是 80(或 90)。我们的新 SQL 脚本至少需要 90 级才能获得新的 SQL 功能。
因此,我编写了一个脚本来检查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
我的问题,这种方法正确吗?我应该检查master
数据库还是model
数据库?盲目地将客户端数据库设置为主/模型有什么缺点吗?