CORREÇÃO: Varejo "Comparação inválida devido a nenhum AGRUPAMENTO" assert ocorre no SQL Server de 2014, 2016 e 2017

Aplica-se a: SQL Server 2014 DeveloperSQL Server 2014 EnterpriseSQL Server 2014 Enterprise Core Mais

Sintomas


Suponha que você tenha uma consulta que realiza algumas operações de cadeia de caracteres, por exemplo, concatenação, em colunas CHAR ou VARCHAR em Microsoft SQL Server 2014, 2016 e 2017. Considere o seguinte cenário:

  • Concatenar colunas com diferentes agrupamentos que são atribuídas a eles.
  • Esses agrupamentos são incompatíveis uns com os outros. Por exemplo, você tentar concatenar uma coluna que é agrupada como Latin1_General_CI_AI com Latin1_General_BIN.
  • O resultado final da concatenação é atribuído a um agrupamento específico (inclusive "database_default") como uma questão de resolução de conflitos de agrupamento.

Nesse cenário, SQL Server pode retornar uma cópia de varejo assert que declara "Comparação inválida devido a nenhum AGRUPAMENTO", e você pode receber algumas mensagens de erro semelhantes à seguinte:

Location:     typinfo.cpp:LineNumber
Expressão: falso
SPID:         SPID
ID do processo: ProcessID
Descrição: Comparação inválida devido a nenhum AGRUPAMENTO.
 

Msg 3624, nível 20, estado 1, linha LineNumber
Falha na verificação de declaração do sistema. Verifique o log de erros do SQL Server para obter detalhes. Normalmente, um erro de declaração é causado por uma software bug ou corrupção de dados. Para verificar se há corrupção de banco de dados, considere executar DBCC CHECKDB. Se você concordou em Enviar despejos para a Microsoft durante a instalação, um minidespejo será enviado à Microsoft. Uma atualização pode ser disponibilizada pela Microsoft no Service Pack mais recente ou um hotfix do suporte técnico.

Msg 596, nível 21, estado 1, linha LineNumber
Não é possível continuar a execução porque a sessão está no estado interrompido.

Msg 0, nível 20, estado 0, linha LineNumber

Ocorreu um erro grave no comando atual.  Os resultados, se houver algum, deverão ser descartados.

Causa


Durante a fase de otimização de consulta, SQL Server tenta calcular cardinalities resultados intermediários de diversos estágios da consulta, por exemplo, a concatenação. Como a resolução de conflitos de agrupamento ocorre no final, o otimizador de consulta pode não estar ciente dela e tenta realizar a computação da cardinalidade de concatenação em uma entrada do agrupamento em conflito.

Resolução


Esse problema foi corrigido nas seguintes atualizações cumulativas para o SQL Server:

Atualização de cumulativo 8 para SQL Server 2016 SP1

Atualização cumulativa 4 para o SQL Server 2017

Atualização cumulativa 9 para o SQL Server 2014 SP2

Status


A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Referências


Saiba mais sobre a terminologia usada pela Microsoft para descrever as atualizações de software.