いくつかの SQL サーバーがあります。異なるバージョン、つまり 2005、2008、2012、2014 を使用します (まもなく 2005 から移行する予定です)。多くの場合、DBA は単純に「テンプレート」クライアント データベースをバックアップおよび復元し、復元されたテンプレートから「新しい」データベースを作成します。
問題は、復元後に互換性レベルが 80 (または 90) になる場合があることです。新しい SQL スクリプトでは、新しい SQL 機能を使用するために少なくともレベル 90 が必要です。
そこで、データベースの互換性レベルをチェックし、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
ますか? クライアントデータベースをマスター/モデルのデータベースに盲目的に設定することによる欠点はありますか?