2009-09-22 6 views
0

Nous essayons de créer une procédure stockée, mais nous courons dans le message d'erreur suivant:Collation conflit dans la procédure stockée tout en attribuant une variable

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

Cette erreur se produit à la ligne 33, qui se lit comme suit:

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

Est-ce que quelqu'un sait comment résoudre ce problème?

+0

Montrez-nous la déclaration de @mintime. – RBarryYoung

+0

DÉCLARER @MINTIME COMME VARCHAR (50); – George

Répondre

3

Normalement, cela fonctionne

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

Ou

Valable uniquement pour les defs de colonne, par exemple dans la variable de table: DECLARE @MINTIME varchar (??) COLLATE DATABASE_DEFAULT

Cela arrive parce que vous avez une discordance quelque part, comme le classement @mintime (en tant que temps DECLARE) ne correspond pas au classement de la base de données (utilisé par la conversion en varchar)

Edit: êtes-vous sûr que c'est cette ligne? L'erreur se produit normalement dans les comparaisons de chaînes. Lors d'une affectation simple, le classement des expressions de la main droite sera contraint dans le classement de la main gauche.

pensée au hasard: la ligne 33, c'est là la ligne 1 est « CREATE PROC » et généralement exclure la substance SET ANSI etc ajouté lorsque vous faites un clic droit, modifier dans SSMS

+0

Il en résulte exactement le même message d'erreur malheureusement. Avez-vous d'autres suggestions? – George

+0

Je suppose que c'est l'inverse: @mintime n'utilise probablement pas la collation DB par défaut – RBarryYoung

+0

@iar: try SQL_Latin1_General_CP1_CI_AS ou Latin1_General_CI_AS – gbn

Questions connexes