Compartilhar via


sp_dbcmptlevel (Transact-SQL)

Define certos comportamentos de banco de dados como sendo compatíveis com a versão especificada do SQL Server.

Observação importanteImportante

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Não utilize esse recurso em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam. Use o Nível de Compatibilidade ALTER DATABASE.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • [ @dbname= ] name
    É o nome do banco de dados para o qual o nível de compatibilidade será alterado. Os nomes dos bancos de dados devem estar de acordo com as regras para identificadores. name é sysname, com um padrão de NULL.

  • [ @new_cmptlevel= ] version
    É a versão do SQL Server com a qual o banco de dados se tornará compatível. version é tinyint, com um padrão de NULL. O valor deve ser um dos seguintes:

    80 = SQL Server 2000

    90 = SQL Server 2005

    100 = SQL Server 2008

Valores de código de retorno

0 (êxito) ou 1 (falha)

Conjuntos de resultados

Se nenhum parâmetro for especificado ou se o parâmetro name não for especificado, sp_dbcmptlevel retornará um erro.

Se name for especificado sem version, o Mecanismo de Banco de Dados retornará uma mensagem que exibe o nível de compatibilidade atual do banco de dados especificado.

Comentários

Para uma descrição de níveis de compatibilidade, consulte Nível de compatibilidade de ALTER DATABASE (Transact-SQL).

Permissões

Somente o proprietário do banco de dados, os membros da função de servidor fixa sysadmin e da função de banco de dados fixa db_owner (se você estiver alterando o banco de dados atual) podem executar esse procedimento.

Exemplos

A. Alterando o nível de compatibilidade para SQL Server 2000

O exemplo a seguir altera o nível de compatibilidade do banco de dados AdventureWorks2008R2 para 80.

EXEC sp_dbcmptlevel AdventureWorks2008R2, 80;
GO

B. Efeito do nível de compatibilidade em ORDER BY (cenário 1)

O exemplo a seguir ilustra a diferença na associação ORDER BY para os níveis de compatibilidade 80 e 90. O exemplo cria uma tabela de exemplo, SampleTable, no banco de dados tempdb.

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

No nível de compatibilidade 90, o nível padrão, a seguinte instrução SELECT... ORDER BY produz um erro porque o nome de coluna na cláusula AS, c1, é ambíguo.

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

Depois de redefinir o banco de dados para o nível de compatibilidade 80, a mesma instrução SELECT... ORDER BY terá êxito.

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

A seguinte instrução SELECT... ORDER BY funciona em ambos os níveis de compatibilidade.

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. Efeito do nível de compatibilidade em ORDER BY (cenário 2)

No nível de compatibilidade 90, o nível padrão, a seguinte instrução SELECT...ORDER BY produz um erro porque há um prefixo de tabela adicional na cláusula ORDER BY.

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

Depois de redefinir o banco de dados para o nível de compatibilidade 80, a mesma instrução SELECT...ORDER BY terá êxito.

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

A seguinte instrução SELECT...ORDER BY funciona em ambos os níveis de compatibilidade.

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