sp_dbcmptlevel (Transact-SQL)
データベースの特定の動作を、指定したバージョンの SQL Server と互換性のある動作に設定します。
重要 |
---|
この機能は、Microsoft SQL Server の将来のバージョンで削除されます。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。代わりに ALTER DATABASE 互換性レベルを使用します。 |
構文
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 を指定した場合、データベース エンジンでは指定したデータベースの現在の互換性レベルを示すメッセージが返されます。
権限
このプロシージャを実行できるのは、データベース所有者、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