KB4054398 - CORREÇÃO: A afirmação de retalho "Comparação inválida devido a NENHUM AGRUPAMENTO" ocorre em SQL Server 2014, 2016 e 2017

Aplica-se A
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2017 Standard on Windows SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Sintomas

Suponha que tem uma consulta que executa algumas operações de cadeia, por exemplo, concatenação, em colunas CHAR ou VARCHAR no Microsoft SQL Server 2014, 2016 e 2017. Tenha em conta o seguinte cenário:

  • Pode concatenar colunas com agrupamentos diferentes atribuídos às mesmas.
  • Esses agrupamentos são incompatíveis uns com os outros. Por exemplo, tenta concatenar uma coluna que está agrupada como Latin1_General_CI_AI com Latin1_General_BIN.
  • O resultado final da concatenação é atribuído a um agrupamento específico (incluindo "database_default") como uma questão da resolução de conflitos de agrupamento.

Neste cenário, SQL Server pode devolver uma afirmação de revenda que indica "Comparação inválida devido a NENHUM AGRUPAMENTO" e poderá receber algumas mensagens de erro semelhantes às seguintes:

Nota

  • Localização: typinfo.cpp:Número de Linha
    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, Número de Linha
    Uma verificação de asserção do sistema falhou. Verifique o SQL Server registo de erros para obter detalhes. Normalmente, uma falha de asserção é causada por um erro de software ou danos nos dados. Para verificar se existem danos na base de dados, considere executar DBCC CHECKDB. Se tiver concordado em enviar informações de falha de sistema à Microsoft durante a configuração, será enviada uma mini captura para a Microsoft. Pode estar disponível uma atualização da Microsoft no Service Pack mais recente ou numa Correção do Suporte Técnico.

  • Msg 596, Nível 21, Estado 1, Número de Linha
    Não é possível continuar a execução porque a sessão está no estado de eliminação.

  • Msg 0, Nível 20, Estado 0, Line LineNumber

  • Ocorreu um erro grave no comando atual.  Os resultados, se existirem, devem ser eliminados.

Causa

Durante a fase de otimização da consulta, SQL Server tenta calcular cardinalidades em resultados intermédios de várias fases da consulta, por exemplo, a concatenação. Uma vez que a resolução de conflitos de agrupamento ocorre no final, o otimizador de consultas pode desconhecer a mesma e tentar efetuar a computação da cardinalidade de concatenação numa entrada com agrupamento em conflito.

Resolução

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

Atualização cumulativa 8 para SQL Server 2016 SP1

Atualização Cumulativa 4 para SQL Server 2017

Atualização Cumulativa 9 para SQL Server 2014 SP2

Acerca das atualizações cumulativas para SQL Server:

Cada nova atualização cumulativa para SQL Server contém todas as correções e todas as correções de segurança incluídas na atualização cumulativa anterior. Consulte as atualizações cumulativas mais recentes para SQL Server:

Atualização cumulativa mais recente do SQL Server 2016

Atualização cumulativa mais recente do SQL Server 2017

Atualização cumulativa mais recente para SQL Server 2014

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".

Referências

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