Cum se face colaționarea SQL_Latin1_General_CP1_CI_AS folosind operatorul IN (Programare, Server Sql, Sql Server 2005, Tsql)

Kashif a intrebat.

Vreau să filtrez înregistrările pe „Email”, interogarea mea este ca aceasta.

SELECT * FROM #temp WHERE email NOT IN (SELECT email FROM Customer)

Îmi dă următoarea eroare

Nu se poate rezolva conflictul de collationare între „SQL_Latin1_General_CP1_CI_AS” și „Latin1_General_CI_AS” în operațiunea equal to.

Pot utiliza colarea dacă există un operator egal (=) în loc de IN. Dar utilizarea Collate aici îmi dă o eroare de sintaxă.

SELECT * FROM #temp WHERE email NOT IN (SELECT email FROM Customer) collate SQL_Latin1_General_CP1_CI_AS

Cum pot rezolva acest lucru. Nu pot să renunț și să creez din nou tabele, deoarece este vorba de o bază de date live.

Datele din tabelul #temp sunt din SQL Server 2000, iar tabelul Customer este din SQL Server 2005.

Mulțumesc.

1 răspunsuri
gbn
...
NOT IN (SELECT email COLLATE SQL_Latin1_General_CP1_CI_AS AS email FROM Customer)

Bitul collate urmează numele coloanei, practic.

Sau așa (depinde de care dintre ele doriți):

SELECT * FROM #temp WHERE email collate SQL_Latin1_General_CP1_CI_AS NOT IN (SELECT email FROM Customer) 

În cele din urmă, dacă DB-ul dvs. este SQL_Latin1_General_CP1_CI_AS, o opțiune este să utilizați ...COLLATE Database_Default... pentru a constrânge la o setare implicită.