KB4054398 - CORREZIONE: "Confronto non valido a causa di NESSUNA COLLATION" asserzione al dettaglio si verifica in SQL Server 2014, 2016 e 2017

Si applica 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)

Sintomi

Si supponga di avere una query che esegue alcune operazioni di stringa, ad esempio la concatenazione, sulle colonne CHAR o VARCHAR in Microsoft SQL Server 2014, 2016 e 2017. Si consideri lo scenario seguente:

  • Le colonne vengono concatenate con regole di confronto diverse assegnate.
  • Queste regole di confronto non sono compatibili tra loro. Ad esempio, si prova a concatenare una colonna fascicolata come Latin1_General_CI_AI con Latin1_General_BIN.
  • Il risultato finale della concatenazione viene assegnato a una fascicolatura specifica (inclusa la "database_default") per la risoluzione del conflitto di confronto.

In questo scenario, SQL Server può restituire un'asserzione retail che indica "Confronto non valido a causa di NESSUNA FASCICOLATURA" e potrebbe essere visualizzato un messaggio di errore simile al seguente:

Nota

  • Posizione: typinfo.cpp:NumeroLinea
    Espressione: false
    SPID: SPID
    ID processo: ProcessID
    Descrizione: confronto non valido a causa di NESSUNA FASCICOLATURA.

  • Msg 3624, Livello 20, Stato 1, LineNumber
    Un controllo dell'asserzione di sistema non è riuscito. Per informazioni dettagliate, controllare il log degli errori SQL Server. In genere, un errore di asserzione è causato da un bug del software o dal danneggiamento dei dati. Per verificare se il database è danneggiato, è consigliabile eseguire DBCC CHECKDB. Se hai accettato di inviare dump a Microsoft durante l'installazione, un mini dump verrà inviato a Microsoft. Un aggiornamento potrebbe essere disponibile da Microsoft nel Service Pack più recente o in un aggiornamento rapido dal supporto tecnico.

  • Msg 596, Livello 21, Stato 1, LineNumber
    Non è possibile continuare l'esecuzione perché la sessione è nello stato kill.

  • Msg 0, Level 20, State 0, LineNumber

  • Si è verificato un grave errore nel comando corrente.  I risultati, se presenti, devono essere scartati.

Causa

Durante la fase di ottimizzazione della query, SQL Server tenta di calcolare le cardinalità sui risultati intermedi di varie fasi della query, ad esempio la concatenazione. Poiché la risoluzione del conflitto di fascicolatura viene eseguita alla fine, query optimizer potrebbe non essere a conoscenza di esso e tenta di eseguire il calcolo della cardinalità di concatenazione su un input con fascicolatura in conflitto.

Risoluzione

Questo problema è stato risolto negli aggiornamenti cumulativi seguenti per SQL Server:

Aggiornamento cumulativo 8 per SQL Server 2016 SP1

Aggiornamento cumulativo 4 per SQL Server 2017

Aggiornamento cumulativo 9 per SQL Server 2014 SP2

Informazioni sugli aggiornamenti cumulativi per SQL Server:

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli aggiornamenti rapidi e tutte le correzioni per la sicurezza inclusi nell'aggiornamento cumulativo precedente. Scopri gli aggiornamenti cumulativi più recenti per SQL Server:

Ultimo aggiornamento cumulativo per SQL Server 2016

Ultimo aggiornamento cumulativo per SQL Server 2017

Ultimo aggiornamento cumulativo per SQL Server 2014

Stato

Microsoft ha confermato che si tratta di un problema relativo ai prodotti elencati nella sezione "Si applica a".

Riferimenti

Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.