2010-11-18 63 views
0

Subquestioning la réponse à mon autre question:Comment comparer des symboles par collation différente de la collation par défaut de la base de données?

Comment mieux comparer les 2 symboles (non-N ') en utilisant explicitement un classement qui est différent d'une collation de base de données par défaut?

Mise à jour: Je dois comparer char() ou varchar() valeurs I extraites d'une base de données et les mettre dans les variables @ s1 et @ s2

use dbName; 
--here I alternated different db names with different collations 

declare @s1 nchar(1)='à' 
declare @s2 nchar(1)='a' 
select 
    case 
    when @s1 <> @s2 Then 'a is NOT equal à' 
    else 'a is equal to à' 
    end 
collate latin1_General_CS_AS 

sorties

  • a est égal à uN (sur la base de données avec le classement par défaut LATIN1_General_CI_AI)
  • un est égal à pas (db avec Latin1_General_CI_AS

Répondre

2

Vous dites qu'il comment assembler les cordes « un est pas égal à » et « un est égal à å », plutôt que pour la comparaison:

declare @s1 nchar(1)='à' 
declare @s2 nchar(1)='a' 
select 
    case 
    when @s1 <> @s2 collate latin1_General_CS_AS Then 'a is NOT equal à' 
    else 'a is equal to à' 
    end 
+0

Est-il possible de passer outre le classement de base de données par défaut pour un bloc d'opérations au lieu d'écrire COLLATE dans chaque déclaration? –

+0

@ vgv8 - Je ne suis au courant d'aucun moyen de le faire - l'aide pour l'assemblage, http://msdn.microsoft.com/en-us/library/ms184391.aspx, indique seulement 3 endroits où il peut être utilisé (Définition de base de données, définition de colonne et classements de collation, ce que nous faisons ici). –