1

いくつかの 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ますか? クライアントデータベースをマスター/モデルのデータベースに盲目的に設定することによる欠点はありますか?

4

1 に答える 1