Конфликт SQL-сопоставлений при сравнении со столбцом во временной таблице - PullRequest
11 голосов
/ 10 сентября 2009

У меня есть запрос SQL, который сравнивает значение в базе данных с константой:

SELECT * FROM my_table
INNER JOIN #TempTable tem
    ON my_table.id = temp.id
    AND my_table.key = 'SOME STRING'

И я получаю ошибку:

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.

Как я могу обойти это? (без внесения изменений в базу данных)

ОБНОВЛЕНИЕ: я получаю эту ошибку, даже если я удаляю последнее подобное (сравнение строк) ...

Ответы [ 4 ]

15 голосов
/ 10 сентября 2009

Кажется, ваши id VARCHAR с разными параметрами сортировки.

Попробуйте это:

SELECT  *
FROM    my_table
INNER JOIN
        #TempTable tem
ON      my_table.id = temp.id COLLATE SQL_Latin1_General_CP1_CI_AS
        AND my_table.key = 'SOME STRING'
5 голосов
/ 10 сентября 2009

Укажите параметры сортировки внутри объявления вашей временной таблицы.

CREATE TABLE #TempTable (ID NVARCHAR(255) COLLATE database_default)
2 голосов
/ 10 сентября 2009

Проблема в временной таблице. Он использует сопоставление tempdb.

Вы можете создать таблицу в вашей действительной базе данных, а не временную таблицу, и тогда они будут иметь одинаковое сопоставление. Или укажите параметры сортировки при создании временной таблицы.

1 голос
/ 10 сентября 2009

1001 * попробовать *

SELECT * FROM my_table
INNER JOIN #TempTable temp    
    ON my_table.id = temp.id collate database_default
    AND my_table.key = 'SOME STRING'
...