sp_dbcmptlevel (Transact-SQL)

Configura varios comportamientos de la base de datos para que sean compatibles con la versión especificada de SQL Server.

Nota importanteImportante

Esta característica se quitará en una versión futura de Microsoft SQL Server. No utilice esta característica en nuevos trabajos de desarrollo y modifique lo antes posible las aplicaciones que actualmente la utilizan. Use Nivel de compatibilidad de ALTER DATABASE en su lugar.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • [ @dbname= ] name
    Es el nombre de la base de datos cuyo nivel de compatibilidad se va a cambiar. Los nombres de las bases de datos deben ajustarse a las reglas definidas para los identificadores. name es de tipo sysname y su valor predeterminado es NULL.

  • [ @new_cmptlevel= ] version
    Es la versión de SQL Server con la que se va a hacer compatible la base de datos. version es de tipo tinyint y su valor predeterminado es NULL. Debe tener uno de los siguientes valores:

    80 = SQL Server 2000

    90 = SQL Server 2005

    100 = SQL Server 2008

Valores de código de retorno

0 (correcto) o 1 (error)

Conjuntos de resultados

Si no se especifican parámetros o si no se especifica el parámetro name, sp_dbcmptlevel devuelve un error.

Si se especifica name sin version, Database Engine (Motor de base de datos) devuelve un mensaje donde se indica el nivel de compatibilidad actual de la base de datos especificada.

Notas

Para obtener una descripción de estos niveles de compatibilidad, consulte Nivel de compatibilidad de ALTER DATABASE (Transact-SQL).

Permisos

Sólo el propietario de la base de datos, los miembros de la función fija de servidor sysadmin y la función fija de base de datos db_owner (si va a cambiar la base de datos actual) pueden ejecutar este procedimiento.

Ejemplos

A. Cambiar el nivel de compatibilidad a SQL Server 2000

En el ejemplo siguiente se cambia el nivel de compatibilidad de la base de datos AdventureWorks a 80.

EXEC sp_dbcmptlevel AdventureWorks, 80;
GO

B. Efecto del nivel de compatibilidad en ORDER BY (escenario 1)

En el ejemplo siguiente se muestra la diferencia del enlace ORDER BY para los niveles de compatibilidad 80 y 90. Se crea una tabla de ejemplo, SampleTable, en la base de datos tempdb.

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

En el nivel de compatibilidad 90, que es el predeterminado, la siguiente instrucción SELECT... ORDER BY genera un error porque el nombre de la columna de la cláusula AS, c1, es ambiguo.

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

Después de restablecer la base de datos al nivel de compatibilidad 80, la misma instrucción SELECT... ORDER BY se ejecuta correctamente.

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

La siguiente instrucción SELECT... ORDER BY funciona en ambos niveles de compatibilidad.

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. Efecto del nivel de compatibilidad en ORDER BY (escenario 2)

En el nivel de compatibilidad 90, que es el predeterminado, la siguiente instrucción SELECT...ORDER BY genera un error porque hay un prefijo de tabla adicional en la cláusula ORDER BY.

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

Después de restablecer la base de datos al nivel de compatibilidad 80, la misma instrucción SELECT...ORDER BY se ejecuta correctamente.

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

La siguiente instrucción SELECT...ORDER BY funciona en ambos niveles de compatibilidad.

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