1

我们有一些 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数据库?盲目地将客户端数据库设置为主/模型有什么缺点吗?

4

1 回答 1

1

由于您正在恢复数据库,因此它们保留旧的兼容性级别..新创建的数据库将继承模型数据库兼容性级别..

因此,将恢复的数据库兼容性级别更改为您希望的级别,而不是基于模型/主...

将模型数据库兼容性级别更改为您选择的级别,因此新的将继承

于 2017-01-09T08:22:13.767 回答