I want to filter records on 'Email' my query is like this.
SELECT * FROM #temp WHERE email NOT IN (SELECT email FROM Customer)
It gives me following error
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.
I can use collate if there is equal operator (=) instead of IN. But using Collate here gives me syntax error.
SELECT * FROM #temp WHERE email NOT IN (SELECT email FROM Customer) collate SQL_Latin1_General_CP1_CI_AS
How can I resolve this. I can't drop and re create tables because it is live db.
Data in #temp table is from SQL Server 2000 and Customer table is in SQL Server 2005
Thanks.
The collate clause is used for case sensitive and case insensitive searches in the columns of the SQL server. There are two types of collate clause present: SQL_Latin1_General_CP1_CS_AS for case sensitive. SQL_Latin1_General_CP1_CI_AS for case insensitive.
COLLATE can be used at the database level or the column level. Since you are trying to UNION two tables, using the column collation on the needed columns will resolve your query. Of course, if you have several columns with conflicting collations you will need to define their collations as well.
To view the collation setting of a databaseIn Object Explorer, connect to an instance of the Database Engine and on the toolbar, click New Query. In the query window, enter the following statement that uses the sys. databases system catalog view. SELECT name, collation_name FROM sys.
Collation Latin1_General_CS_AS uses dictionary order so both upper and lower case characters of the specified range are included. Specify a binary collation to get the behavior you want (the 26 ASCII characters in the 97-122 code point range): SELECT empid, lastname FROM HR.
...
NOT IN (SELECT email COLLATE SQL_Latin1_General_CP1_CI_AS AS email FROM Customer)
The collate bit follows the column name, basically.
Or this (it depends on which one you want):
SELECT * FROM #temp WHERE email collate SQL_Latin1_General_CP1_CI_AS NOT IN (SELECT email FROM Customer)
Finally, if your DB is SQL_Latin1_General_CP1_CI_AS, one option is to use ...COLLATE Database_Default...
to coerce to a default setting.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With