sp_dbcmptlevel (Transact-SQL)
Belirtilen sürüm ile uyumlu olmak için belirli bir veritabanı davranışları ayarlar. SQL Server.
Important 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. |
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