где добавить КОЛЛЕКЦИЮ в SPROC - PullRequest
0 голосов
/ 08 июня 2010

В хранимой процедуре SQL Server произошла ошибка сортировки.

Не удалось разрешить конфликт сопоставления между "Latin1_General_CS_AS" и "SQL_Latin1_General_CP1_CI_AS" в операции равно.

Сортировка базы данных: Latin1_General_CS_AS

Ошибка происходит в строке INSERT INTO. Куда мне добавить оператор COLLATE?

CREATE TABLE #TempList
(
    TNR varchar(10)
)

DECLARE @TNR varchar(10), @Pos int

SET @subjectList = LTRIM(RTRIM(@subjectList))+ ','
SET @Pos = CHARINDEX(',', @subjectList, 1)

IF REPLACE(@subjectList, ',', '') <> ''
BEGIN
    WHILE @Pos > 0
    BEGIN
        SET @TNR = LTRIM(RTRIM(LEFT(@subjectList, @Pos - 1)))
        IF @TNR <> ''
        BEGIN
            INSERT INTO #TempList (TNR) VALUES (CAST(@TNR AS varchar(10))) --this is where it errors
        END
        SET @subjectList = RIGHT(@subjectList, LEN(@subjectList) - @Pos)
        SET @Pos = CHARINDEX(',', @subjectList, 1)

    END
END 

1 Ответ

1 голос
/ 08 июня 2010

В временных таблицах используется сопоставление сервера tempdb, которое является сопоставлением сервера.

Используя COLLATE Database_Default, вы изменяете его для использования параметров сортировки базы данных "хост" и , что делает приведение параметров сортировки независимым от фактической сортировки БД

CREATE TABLE #TempList
(
    TNR varchar(10) COLLATE Database_Default
)
...

Не для @TNR (даже если это строковый тип данных), потому что он, очевидно, имеет такое же сопоставление, что и БД (не сервер), следовательно, ошибка ...

...