Ajuste do Nível de Compatibilidade do Banco de Dados SQL Server
Objetivo
Orientar administradores de banco de dados e equipes de implantação sobre como identificar e corrigir problemas relacionados ao Nível de Compatibilidade (Compatibility Level) do banco de dados utilizado pelo Tactium.
Sintoma
Durante a execução de scripts de atualização ou procedures do Tactium podem ocorrer erros semelhantes aos abaixo:
'TRY_CONVERT' is not a recognized built-in function name.
Incorrect syntax near the keyword 'ELSE'.
'TRY_CAST' is not a recognized built-in function name.
Mesmo quando o servidor utiliza uma versão recente do SQL Server (2019 ou superior).
Causa
Embora o SQL Server instalado suporte funções como TRY_CONVERT, TRY_CAST e outros recursos modernos, o banco de dados pode estar configurado com um Nível de Compatibilidade inferior ao exigido pela aplicação.
Nessa situação, o SQL Server passa a interpretar os comandos utilizando regras de versões antigas, ocasionando falhas na compilação das procedures.
Como verificar o nível de compatibilidade
Execute a consulta abaixo:
SELECT
name,
compatibility_level
FROM sys.databases
WHERE name = DB_NAME();
Exemplo de retorno:
| Banco | compatibility_level |
|---|---|
| CRM | 100 |
Como identificar a versão do SQL Server
SELECT @@VERSION;
Exemplo:
Microsoft SQL Server 2019
15.x
Compatibilidade recomendada
| Versão do SQL Server | Compatibility Level |
|---|---|
| SQL Server 2012 | 110 |
| SQL Server 2014 | 120 |
| SQL Server 2016 | 130 |
| SQL Server 2017 | 140 |
| SQL Server 2019 | 150 |
| SQL Server 2022 | 160 |
Como alterar o nível de compatibilidade
Pré-requisito: possuir permissão de administrador (ALTER DATABASE).
Execute:
ALTER DATABASE [NomeDoBanco]
SET COMPATIBILITY_LEVEL = 150;
Substitua NomeDoBanco pelo nome do banco do CRM.
Como confirmar a alteração
Após executar o comando, valide novamente:
SELECT
name,
compatibility_level
FROM sys.databases
WHERE name = DB_NAME();
Resultado esperado:
| Banco | compatibility_level |
|---|---|
| CRM | 150 |
Próximo passo
Após alterar o nível de compatibilidade:
- Execute novamente a atualização do Tactium.
- Reexecute a procedure que apresentou erro.
- Valide se não existem novas mensagens de compilação.
Perguntas Frequentes
O SQL Server é 2019. Por que ocorre esse erro?
Porque o Compatibility Level do banco está configurado para uma versão antiga (por exemplo, 100 ou 110). O SQL Server executa determinadas instruções respeitando esse nível de compatibilidade.
Alterar o Compatibility Level atualiza o SQL Server?
Não.
O comando altera apenas o comportamento do banco de dados, sem modificar a versão instalada do SQL Server.
Há risco em alterar o nível de compatibilidade?
Em geral, não. A alteração é suportada pela Microsoft e recomendada quando o banco é executado em versões mais recentes do SQL Server.
Entretanto, como qualquer alteração de configuração, recomenda-se:
- realizar backup do banco de dados;
- executar a alteração em ambiente de homologação quando possível;
- validar os processos críticos da aplicação após a mudança.
Preciso reiniciar o SQL Server?
Não.
A alteração é aplicada imediatamente e não requer reinicialização do serviço.
Preciso executar a alteração em todos os bancos?
Somente nos bancos utilizados pelo Tactium que apresentarem nível de compatibilidade inferior ao suportado pela versão instalada do SQL Server.
Recomendação da Tactium
Para ambientes executando Microsoft SQL Server 2019, recomenda-se manter o banco de dados do Tactium com Compatibility Level 150, garantindo suporte aos recursos utilizados pelas versões atuais da aplicação e evitando erros durante futuras atualizações.
Boas práticas para futuras implantações
Antes de iniciar qualquer atualização do Tactium, recomenda-se validar:
- ✔ Versão do SQL Server suportada pela versão da aplicação.
- ✔ Nível de compatibilidade do banco de dados.
- ✔ Backup atualizado do banco.
- ✔ Permissões do usuário responsável pela atualização.
Essa verificação preventiva reduz significativamente a ocorrência de falhas durante a execução de scripts de atualização e procedimentos armazenados.
