Regole Di Confronto Tra I Campi Di Tabelle DB.

E’ necessario conoscere le Regole di confronto tra i campi di tabelle DB Microsoft Sql Server!
Vi sarà certamente capitato, facendo un confronto o una Join tra i dati di due tabelle di un DataBase Microsoft, di incappare in questo messaggio “Cannot resolve the collation conflict between ‘SQL_Latin1_General_CP1_CI_AS’ and ‘Latin1_General_CI_AS’ in the equal to operation“, e non riuscire a portare a termine l’operazione.

Nella grande maggioranza dei casi, questo capita principalmente facendo confronti o Join con tabelle temporanee (quelle identificate con “#”).

Il motivo di questo è da ricercarsi nella Collation in base alla quale sono definite la tabella temporanea e quella del DB (potrebbe succedere anche facendo Join o confronti con campi di tabelle di differenti Databases).

Le Collation (introdotte dalla versione 2000 di Sql Server), rappresentano degli insiemi di regole per il confronto dei dati dal DBMS.

Al momento dell’installazione del server Database, chi si occupa del sistema, in accordo col DBMA, dovrebbe scegliere la Collation migliore per la specifica circostanza.
Purtroppo questo non accade quasi mai (soprattutto in realtà piccole, in cui la cura di questi particolari è trascurata), e la frendesia del “Next” si realizza in un’installazione non troppo precisa.

La definizione di una tabella temporanea, appartenente al Server, prevede l’attribuzione della Collation Latin1_General_CI_AS.
Se la tabella del DB (e lo stesso DB) dovesse avere una Collation differente, non sarebbe possibile confrontare i dati ed il sistema restituirebbe il messaggio sopra.

Per ovviare al problema è possibile forzare le regole di confronto in modo da renderle uguali su tutti gli elementi a confronto:

SELECT […]
FROM Orders A
JOIN OrderLines B
ON B.ORDERID=A.ORDERID
LEFT JOIN #prodToExclude C
ON C.ProdID COLLATE DATABASE_DEFAULT = B.ProdID COLLATE DATABASE_DEFAULT
[…]

Questo consente di proseguire col confronto ed eseguire la selezione.

C’è da tenere presente che l’alterazione delle Collation fa perdere i riferimenti degli indici, rallentando l’esecuzione della query.