sp_dbcmptlevel (Transact-SQL)

データベースの特定の動作を、指定したバージョンの SQL Server と互換性のある動作に設定します。

重要な注意事項重要

この機能は、Microsoft SQL Server の将来のバージョンで削除されます。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。代わりに ALTER DATABASE 互換性レベルを使用します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_dbcmptlevel [ [ @dbname = ] name ] 
    [ , [ @new_cmptlevel = ] version ]

引数

  • [ @dbname= ] name
    互換性レベルを変更するデータベースの名前を指定します。データベース名は識別子の規則に従っている必要があります。name のデータ型は sysname で、既定値は NULL です。

  • [ @new_cmptlevel= ] version
    データベースの互換性の対象となる SQL Server のバージョンを指定します。version のデータ型は tinyint で、既定値は NULL です。次のいずれかの値を指定する必要があります。

    80 = SQL Server 2000

    90 = SQL Server 2005

    100 = SQL Server 2008

リターン コードの値

0 (成功) または 1 (失敗)

結果セット

パラメーターを 1 つも指定しないか、name パラメーターを指定しなかった場合、sp_dbcmptlevel はエラーを返します。

version を指定せずに name を指定した場合、データベース エンジンでは指定したデータベースの現在の互換性レベルを示すメッセージが返されます。

説明

互換性レベルの説明については、「ALTER DATABASE 互換性レベル (Transact-SQL)」を参照してください。

権限

このプロシージャを実行できるのは、データベース所有者、sysadmin 固定サーバー ロールのメンバー、および db_owner 固定データベース ロールのメンバー (現在のデータベースを変更する場合) だけです。

A. 互換性レベルを SQL Server 2000 に変更する

次の例では、AdventureWorks2008R2 データベースの互換性レベルを 80 に変更します。

EXEC sp_dbcmptlevel AdventureWorks2008R2, 80;
GO

B. ORDER BY での互換性レベルの影響 (シナリオ 1)

次の例は、互換性レベル 80 と 90 の ORDER BY バインドの違いを示しています。この例では、サンプル テーブル SampleTable を tempdb データベース内に作成します。

USE tempdb;
CREATE TABLE SampleTable(c1 int, c2 int);
GO

互換性レベル 90 (既定) の場合、次の SELECT... ORDER BY ステートメントを実行すると、AS 句の列名 c1 があいまいなためエラーが発生します。

SELECT c1, c2 AS c1
    FROM SampleTable
    ORDER BY c1;
GO

データベースを互換性レベル 80 に再設定した後で、同じ SELECT... ORDER BY ステートメントを実行すると、ステートメントは成功します。

sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c1
    FROM SampleTable
    ORDER BY c1;
GO

次の SELECT... ORDER BY ステートメントは、どちらの互換性レベルでも機能します。

sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO

sp_dbcmptlevel tempdb, 90
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO

C. ORDER BY での互換性レベルの影響 (シナリオ 2)

互換性レベル 90 (既定) の場合、次の SELECT...ORDER BY ステートメントを実行すると、ORDER BY 句にテーブルのプレフィックスがあるためエラーが発生します。

SELECT c1 AS x
    FROM SampleTable
    ORDER BY SampleTable.x;
GO

データベースを互換性レベル 80 に再設定した後で、同じ SELECT...ORDER BY ステートメントを実行すると、ステートメントは成功します。

sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
    FROM SampleTable
    ORDER BY SampleTable.x;
GO

次の SELECT...ORDER BY ステートメントは、どちらの互換性レベルでも機能します。

sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
    FROM SampleTable
    ORDER BY x;
GO
sp_dbcmptlevel tempdb, 90
SELECT c1 AS x
    FROM SampleTable
    ORDER BY x;
GO