2010-06-08 6 views
0

J'ai une erreur de classement dans une procédure stockée dans SQL Server.où ajouter une COLLATION dans un SPROC

Impossible de résoudre le conflit de classement entre "Latin1_General_CS_AS" et "SQL_Latin1_General_CP1_CI_AS" dans l'opération égale à.

collation de la base de données est Latin1_General_CS_AS

L'erreur se produit sur l'instruction INSERT INTO ligne. Où dois-je ajouter une instruction 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 

Répondre

1

Les tables temporaires utilisent le classement du serveur tempdb qui est le classement du serveur.

En utilisant COLLATE Database_Default vous changiez d'utiliser le classement de la base « hôte » et font la contrainte de collecte indépendante de la collation DB réelle

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

Pas pour @TNR (même si une chaîne type de données) parce que cela a évidemment la même collation que la DB (pas de serveur) d'où l'erreur ...

+0

génial! ça a marché! Je vous remercie! – Daria

+0

De rien. S'il vous plaît n'hésitez pas à upvote et accepter ... (la flèche vers le haut et la coche) – gbn

+0

comment mettre en collation lorsque vous n'utilisez pas la table de temp? – Sharique

Questions connexes