KB4054398 — POPRAWKA: "Nieprawidłowe porównanie z powodu BRAKU SORTOWANIA" występuje w SQL Server 2014, 2016 i 2017

Dotyczy
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)

Objawy

Załóżmy, że masz zapytanie, które wykonuje pewne operacje na ciągach, na przykład łączenie na kolumnach CHAR lub VARCHAR w programach Microsoft SQL Server 2014, 2016 i 2017. Rozważmy następujący scenariusz:

  • Kolumny można łączyć za pomocą różnych sortowań, które są do nich przypisane.
  • Zestawienia te są ze sobą niezgodne. Na przykład próbujesz połączyć kolumnę posortowaną jako Latin1_General_CI_AI z Latin1_General_BIN.
  • Ostateczny wynik łączenia jest przypisywany do określonego sortowania (w tym "database_default") w ramach rozwiązywania konfliktów sortowania.

W takim przypadku program SQL Server może zwrócić potwierdzenie sprzedaży detalicznej "Nieprawidłowe porównanie z powodu BRAKU SORTOWANIA" i mogą zostać wyświetlone komunikaty o błędach podobne do następujących:

Uwaga

  • Lokalizacja: typinfo.cpp:LineNumber
    Wyrażenie: fałsz
    SPID: SPID
    Identyfikator procesu: ProcessID
    Opis: Nieprawidłowe porównanie ze względu na BRAK SORTOWANIA.

  • Wiadomość 3624, Poziom 20, Stan 1, Numer wiersza
    Sprawdzanie potwierdzeń systemu nie powiodło się. Sprawdź dziennik błędów programu SQL Server, aby uzyskać szczegółowe informacje. Zazwyczaj niepowodzenie asercji jest spowodowane błędem oprogramowania lub uszkodzeniem danych. Aby sprawdzić, czy baza danych nie jest uszkodzona, rozważ uruchomienie polecenia DBCC CHECKDB. Jeśli wyrażono zgodę na wysyłanie zrzutów do firmy Microsoft podczas instalacji, minizrzut zostanie wysłany do firmy Microsoft. Aktualizacja może być dostępna od firmy Microsoft w najnowszym dodatku Service Pack lub w poprawce z pomocy technicznej.

  • Wiadomość 596, Poziom 21, Stan 1, Numer wiersza
    Nie można kontynuować wykonywania, ponieważ sesja jest w stanie zabicia.

  • Wiadomość 0, Poziom 20, Stan 0, Numer wiersza

  • Wystąpił poważny błąd bieżącego polecenia.  Ewentualne wyniki należy odrzucić.

Przyczyna

Na etapie optymalizacji kwerend program SQL Server próbuje obliczyć kardynalność na podstawie wyników pośrednich różnych etapów zapytania, na przykład połączenia. Ponieważ rozwiązywanie konfliktów sortowania odbywa się na samym końcu, optymalizator zapytań może nie być tego świadomy i próbuje wykonać obliczenia kardynalności łączenia na wejściu z sortowaniem powodującym konflikt.

Rozwiązanie

Ten problem został rozwiązany w następujących aktualizacjach zbiorczych programu SQL Server:

Aktualizacja zbiorcza 8 dla programu SQL Server 2016 z dodatkiem SP1

Aktualizacja zbiorcza 4 dla programu SQL Server 2017

Aktualizacja zbiorcza 9 dla programu SQL Server 2014 z dodatkiem SP2

Informacje o aktualizacjach zbiorczych programu SQL Server:

Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji skumulowanej. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:

Najnowsza aktualizacja zbiorcza dla programu SQL Server 2016

Najnowsza aktualizacja zbiorcza dla programu SQL Server 2017

Najnowsza aktualizacja zbiorcza dla programu SQL Server 2014

Stan

Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.

Źródła informacji

Dowiedz się więcej o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.