sp_dbcmptlevel (Transact-SQL)
Define certos comportamentos de banco de dados como sendo compatíveis com a versão especificada do SQL Server.
Importante |
---|
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. |
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