Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Impossibile risolvere il conflitto di confronto

Il problema delle regole di confronto è che, sebbene il database abbia le proprie regole di confronto, ogni tabella e ogni colonna può avere le proprie regole di confronto. Se non specificato, prende il valore predefinito del suo oggetto padre, ma può essere diverso.

Quando modifichi le regole di confronto del database, sarà il nuovo valore predefinito per tutte le nuove tabelle e colonne, ma non cambia le regole di confronto degli oggetti esistenti all'interno del database. Devi andare e modificare manualmente le regole di confronto di ogni tabella e colonna.

Fortunatamente ci sono script disponibili su Internet che possono fare il lavoro. Non ho intenzione di consigliarne nessuno perché non li ho provati, ma qui ci sono alcuni link:

http://www.codeproject.com/Articles/302405/The-Easy-way-of-change-collation-of-all-database

Aggiorna al volo Fascicolazione di tutti i campi nel database

http://www.sqlservercentral.com/Forums/Topic820675-146-1.aspx

Se hai bisogno di regole di confronto diverse su due oggetti o non puoi modificare le regole di confronto, puoi comunque JOIN tra di loro usando COLLATE comando e scegliendo le regole di confronto che desideri unire.

SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE Latin1_General_CI_AS 

o utilizzando le regole di confronto predefinite del database:

SELECT * FROM A JOIN B ON A.Text = B.Text COLLATE DATABASE_DEFAULT