sp_dbcmptlevel(Transact-SQL)

특정 데이터베이스 동작이 지정된 버전의 SQL Server와 호환되도록 설정합니다.

중요 정보중요

Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 말고, 현재 이 기능을 사용하는 응용 프로그램은 가능한 한 빨리 수정하십시오. 대신 호환성 수준을 사용하십시오.

항목 링크 아이콘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(실패)

결과 집합

매개 변수를 지정하지 않거나 name 매개 변수를 지정하지 않으면 sp_dbcmptlevel에서 오류를 반환합니다.

version 없이 name을 지정하면 데이터베이스 엔진에서는 지정한 데이터베이스의 현재 호환성 수준을 표시하는 메시지를 반환합니다.

주의

호환성 수준에 대한 자세한 내용은 ALTER DATABASE 호환성 수준(Transact-SQL)을 참조하십시오.

사용 권한

데이터베이스 소유자, sysadmin 고정 서버 역할 및 db_owner 고정 데이터베이스 역할(현재 데이터베이스를 변경하려는 경우)의 멤버만 이 프로시저를 실행할 수 있습니다.

1. SQL Server 2000으로 호환성 수준 변경

다음 예에서는 AdventureWorks2008R2 데이터베이스의 호환성 수준을 80으로 변경합니다.

EXEC sp_dbcmptlevel AdventureWorks2008R2, 80;
GO

2. ORDER BY에 호환성 수준이 미치는 결과(시나리오 1)

다음 예에서는 호환성 수준 80과 90에서 ORDER BY 바인딩의 차이를 보여 줍니다. 이 예에서는 tempdb 데이터베이스에 SampleTable 예제 테이블을 만듭니다.

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

3. 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