KB4054398 - CORREÇÃO: a afirmação de varejo "Comparação inválida devido a NENHUMA ORDENAÇÃO" ocorre no 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 você tenha uma consulta que execute algumas operações de cadeia de caracteres, por exemplo, concatenação, em colunas CHAR ou VARCHAR no Microsoft SQL Server 2014, 2016 e 2017. Considere o seguinte cenário:

  • Você concatena colunas com diferentes agrupamentos atribuídos a elas.
  • Esses agrupamentos são incompatíveis entre si. Por exemplo, você tenta concatenar uma coluna que é agrupada como Latin1_General_CI_AI com Latin1_General_BIN.
  • O resultado final da concatenação é atribuído a uma ordenação específica (incluindo "database_default") como uma questão de resolução de conflitos de ordenação.

Nesse cenário, o SQL Server pode retornar uma declaração de varejo que declara "Comparação inválida devido a NENHUMA ORDENAÇÃO" e você pode receber algumas mensagens de erro semelhantes às seguintes:

Observação

  • Localização: typinfo.cpp:LineNumber
    Expressão: false
    SPID: SPID
    ID do processo: ProcessID
    Descrição: comparação inválida devido a NENHUMA ORDENAÇÃO.

  • Msg 3624, Nível 20, Estado 1, Linha LineNumber
    Uma verificação de marca de asserção do sistema falhou. Verifique o log de erros do SQL Server para obter detalhes. Normalmente, uma falha de declaração é causada por um bug de software ou corrupção de dados. Para marcar se há banco de dados corrompido, considere executar DBCC CHECKDB. Se você concordou em enviar despejos para a Microsoft durante a instalação, um minidespejo será enviado para a Microsoft. Uma atualização pode estar disponível da Microsoft no Service Pack mais recente ou em 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 de encerramento.

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

  • Ocorreu um erro grave no comando atual.  Os resultados, se houver, devem ser descartados.

Causa

Durante o estágio de otimização da consulta, o SQL Server tenta calcular cardinalidades em resultados intermediários de vários estágios da consulta, por exemplo, a concatenação. Como a resolução de conflitos de ordenação ocorre no final, o otimizador de consulta pode não estar ciente disso e tenta executar o cálculo da cardinalidade de concatenação em uma entrada com ordenação conflitante.

Resolução

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

Atualização cumulativa 8 para o SQL Server 2016 SP1

Atualização cumulativa 4 para o SQL Server 2017

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

Sobre atualizações cumulativas para o SQL Server:

Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes para o 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 do SQL Server 2014

Status

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Referências

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