2010-06-08 2 views
0

У меня ошибка сортировки в хранимой процедуре в SQL Server.где добавить COLLATION в SPROC

Не удается разрешить конфликт сортировки между «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

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

С помощью COLLATE Database_Default вы измените его использовать «хозяин» сверку базы данных и сделать сверку принуждение независимо от фактической БД комплектовки

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

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

+0

awesome! это сработало! Спасибо! – Daria

+0

Добро пожаловать. Пожалуйста, не стесняйтесь повышать и принимать ... (стрелка вверх и галочка) – gbn

+0

Как настроить сортировку, когда не используется таблица temp? – Sharique

Смежные вопросы