sp_dbcmptlevel (Transact-SQL)
Configura varios comportamientos de la base de datos para que sean compatibles con la versión especificada de SQL Server.
![]() |
---|
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. |
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