Applies ToSQL 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 esegua alcune operazioni di stringa, ad esempio la concatenazione, in colonne di tipo CHAR o VARCHAR in Microsoft SQL Server 2014, 2016 e 2017. Considerare lo scenario descritto di seguito:

  • È possibile concatenare colonne con regole di confronto diverse assegnate.

  • Queste regole di confronto sono incompatibili tra loro. Ad esempio, provi a concatenare una colonna che viene fascicolata come Latin1_General_CI_AI con Latin1_General_BIN.

  • Il risultato finale della concatenazione viene assegnato a una specifica regola di confronto (incluso "database_default") per la risoluzione dei conflitti tra le regole di confronto.

In questo scenario, SQL Server può restituire un'asserzione al dettaglio che indica "confronto non valido a causa di nessuna regola di confronto" e potrebbe essere visualizzato un messaggio di errore simile al seguente:

Percorso: typinfo. cpp:lineNumber Espressione: false SPID: SPID ID processo: ProcessID Descrizione: confronto non valido a causa di regole di confronto non valide.

Msg 3624, livello 20, stato 1, riga lineNumber Il controllo dell'asserzione di sistema non è riuscito. Per informazioni dettagliate, vedere il log degli errori di SQL Server. In genere, un errore di asserzione è causato da un bug software o da un danneggiamento dei dati. Per verificare il danneggiamento del database, provare a eseguire DBCC CHECKDB. Se si è deciso di inviare dump a Microsoft durante l'installazione, verrà inviato un mini dump a Microsoft. Un aggiornamento potrebbe essere disponibile da Microsoft nel Service Pack più recente o in un hotfix dal supporto tecnico.

Msg 596, livello 21, stato 1, riga lineNumber Non è possibile continuare l'esecuzione perché la sessione è nello stato Kill.

Msg 0, livello 20, stato 0, riga lineNumber

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

Causa

Durante la fase di ottimizzazione della query, SQL Server cerca di calcolare le cardinalità sui risultati intermedi delle varie fasi della query, ad esempio la concatenazione. Poiché la risoluzione dei conflitti tra le regole di confronto avviene alla fine, Query Optimizer potrebbe ignorarla e cerca di eseguire il calcolo della cardinalità della concatenazione su un input con regole di confronto 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

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. Vedere gli ultimi aggiornamenti cumulativi 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 questo problema si verifica nei prodotti elencati nella sezione "Si applica a".

Riferimenti

Informazioni sulla terminologiautilizzata da Microsoft per descrivere gli aggiornamenti software.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.