sp_dbcmptlevel (Transact-SQL)

Belirtilen sürüm ile uyumlu olmak için belirli bir veritabanı davranışları ayarlar. SQL Server.

Important noteImportant Note:

This feature will be removed in a future version of Microsoft SQL Server. Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. Kullanımı ALTER DATABASE uyumluluk düzey yerine.

Topic link iconTransact-SQL sözdizimi kuralları

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

Bağımsız değişkenler

  • [ @dbname= ] name
    Uyumluluk düzey değiştirilecek olan veritabanının adıdır.Database names must conform to the rules for identifiers.name is sysname, with a default of NULL.

  • [ @new_cmptlevel= ] version
    Is the version of SQL Server with which the database is to be made compatible.version is tinyint, with a default of NULL.Değer aşağıdakilerden biri olmalıdır:

    80 = SQL Server 2000

    90 = SQL Server 2005

    100 = SQL Server 2008

Dönüş Kodu Değerleri

0 (başarılı) veya 1 (hata)

Sonuç Kümeleri

Parametre belirtilmezse, veya, name parametre belirtilmemişse, sp_dbcmptlevel hata verir.

If name olmaksızın belirtildi version, Database Engine Geçerli uyumluluk görüntüleyen bir ileti verir düzey belirtilen veritabanı.

Remarks

Uyumluluğunu düzeylerinin açıklaması için bkz: DATABASE uyumluluk düzey (Transact-SQL) ALTER.

İzinler

Yalnızca veritabanı sahibi, üyeleri sysadmin sabit sunucu rolü ve db_owner (geçerli veritabanını değiştiriyorsanız) sabit veritabanı rolü, bu yordamı çalıştırabilirsiniz.

Örnekler

C.Uyumluluğu değiştirme düzey SQL Server 2000

Aşağıdaki örnek, uyumluluk düzeyini değiştirir AdventureWorks veritabanına 80.

EXEC sp_dbcmptlevel AdventureWorks, 80;
GO

b.Güvenlik açığının etkisini uyumluluk düzey üzerinde ORDER BY (Senaryo 1)

Aşağıdaki örnek, bağlama ORDER BY the 80 ve 90 uyumluluk düzeyleri farkı gösterir.Örnek bir örnek tablo oluşturur. SampleTable, içinde tempdb Veritabanı.

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

Uyumluluk düzey 90, varsayılan düzeyin, aşağıdaki SELECT... ORDER BY statement produces an error because the column name in the AS clause, c1, is ambiguous.

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

Veritabanı uyumluluk düzey için sıfırlanıyor sonra 80, aynı SELECT... ORDER BY statement succeeds.

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

Aşağıdaki SELECT... ORDER BY statement works in both compatibility levels.

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.Güvenlik açığının etkisini uyumluluk düzey üzerinde ORDER BY (Senaryo 2)

Uyumluluk düzey 90, varsayılan düzeyin, aşağıdaki SELECT...ORDER BY bir ek tablo önek olduğundan deyim hata üretir. ORDER BY yan tümce.

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

Veritabanı için uyumluluk düzey sıfırlandıktan sonra 80, aynı SELECT...ORDER BY deyim başarılı olur.

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

Aşağıdaki SELECT...ORDER BY deyim, her iki uyumluluk düzeyleri çalışır.

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