2011-12-16 19 views
7

Quando lancio una query SQL, a volte ottengo il seguente messaggio di errore:collazione del server SQL conflitto

non può risolvere il conflitto di confronto tra "Latin1_General_CI_AS" e "SQL_Latin1_General_CP1_CI_AS" nel uguale al funzionamento.

Spesso risolvo questo problema, semplifica entrambe le regole di confronto delle tabelle. quindi ho bisogno di sapere c'è un modo rapido per risolvere questo problema.

Vorrei mettere qualcosa di speciale nella mia query SQL come risultato se le regole di confronto non sono uguali per entrambe le tabelle nella query sql, quindi anche la query funzionerà perfettamente senza alcun errore. c'è qualche soluzione?

risposta

12

è possibile forzare la quale le regole di confronto utilizzando la clausola COLLATE.

ossia

SELECT * 
FROM Table1 T1 
INNER JOIN Server2.dbo.Table2 T2 
ON T1.Name = T2.Name COLLATE database_default 

conflitti regole di confronto sono comuni quando si uniscono le tabelle tra due database o server, soprattutto se la versione del DB è diverso.

2

È possibile specificare un metodo di confronto in una query utilizzando il collate clause:

where col1 = col2 collate Latin1_General_CI_AS 
0

Potrebbe esserci la possibilità che entrambi i server utilizzino diverse regole di confronto. Se sì, si otterrebbe un errore simile a quello che ho citato all'inizio di questo argomento. Cosa dovresti fare in questo caso?

  1. È possibile modificare le regole di confronto di default di una delle colonne della tabella/campi, ma questo potrebbe avere un effetto a catena per altre tabelle attualmente in uso con il tavolo alterato.

  2. Usa COLLATE DATABASE_DEFAULT parola chiave, mentre i corrispondenti colonne/campi

come:

SELECT T1.EmployeeName, T2.DeptName 
FROM ServerA.dbo.EmpTab T1 
JOIN ServerB.dbo.DeptTab T2 
ON T1.DeptCode COLLATE DATABASE_DEFAULT 
= T2.DeptCode COLLATE DATABASE_DEFAULT 
+0

Si prega di includere la formattazione corretta nel tuo post. –

Problemi correlati