Конфликт сопоставления в хранимой процедуре при назначении переменной - PullRequest
0 голосов
/ 22 сентября 2009

Мы пытаемся создать хранимую процедуру, однако встречаемся со следующим сообщением об ошибке:

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

Эта ошибка возникает в строке 33, которая гласит:

SET @MINTIME = (SELECT CONVERT(varchar,DATEADD(MONTH,-1,GETDATE()),112));

Кто-нибудь знает, как решить эту проблему?

1 Ответ

3 голосов
/ 22 сентября 2009

Обычно это работает

SET @MINTIME =
(SELECT CONVERT(varchar,DATEADD(MONTH,-1,GETDATE()),112)) COLLATE DATABASE_DEFAULT;

Или

Применяется только к столбцам def, например, в табличной переменной: DECLARE @MINTIME varchar (??) COLLATE DATABASE_DEFAULT

Это происходит потому, что у вас где-то есть несоответствие, например, @mintime collation (как время DECLARE) не соответствует параметрам сортировки базы данных (используется при преобразовании в varchar)

Редактировать: вы уверены, что это эта строка? Ошибка происходит при сравнении строк обычно. При простом задании сопоставление выражений для правой руки будет приведено к сопоставлению для левой руки.

Случайная мысль: строка 33, здесь строка 1 обычно является «CREATE PROC» и исключает элементы SET ANSI и т. Д., Добавляемые при щелчке правой кнопкой мыши, редактирование в SSMS

...