2010-10-04 35 views
14

J'ai une table qui provient d'un ancien système hérité sensible à la casse, en particulier une colonne d'état où 's' = 'Schedule import' et 'S' = ' Gestion de l'agenda ». Cette table fait finalement son chemin dans une base de données SQL Server 2000 sur laquelle je peux interroger. Ma requête est relativement simple aller juste pour compte ...Force la requête T-SQL pour être sensible à la casse dans MS

Select trans_type, count(1) from mytable group by trans_type 

C'est le regroupement des chefs d'accusation pour « S » ainsi que les chefs d'accusation les «s. Existe-t-il un moyen de forcer une requête à être sensible au plafond? J'ai accès aux deux environnements SQL Server 2000 et 2005 pour l'exécuter, mais j'ai une capacité d'administration limitée sur le serveur (donc je ne peux pas définir les attributs du serveur) ... Je suppose que je pourrais déplacer les données vers mon site local mon local où j'ai un accès complet aux options du serveur, mais je préférerais une solution tsql.

+0

'alter database votre_database assembler Latin1_General_CS_AS' – pascal

+1

SQL Server 2003 ?? Je ne sais que 2000, 2005, 2008, 2008 R2 .... –

+0

Malheureusement, les autorisations manquent pour modifier la table pascal, même si je pense que cela fonctionnerait – Twelfth

Répondre

25
select trans_type collate SQL_Latin1_General_CP1_CS_AS, count(*) 
from mytable 
group by trans_type collate SQL_Latin1_General_CP1_CS_AS 

Vous pouvez le faire avec =, like, et d'autres opérateurs aussi bien. Notez que vous devez modifier la liste de sélection car vous n'êtes plus regroupé par trans_type, vous le regroupez maintenant par trans_type collate SQL_Latin1_General_CP1_CS_AS. Une sorte de gotcha.

+0

La meilleure solution que je peux voir si cela fonctionne ... merci Ian – Twelfth

1

Pouvez-vous introduire une colonne trans_type_ascii avec la valeur ASCII du trans_type et du groupe sur celle-ci à la place? Ou toute autre colonne que vous pouvez utiliser (isUpperCase) pour les distinguer.

+0

Merci Beth. Je ne peux pas modifier les tables existantes, mais créer une table temporaire et la charger avec les valeurs ascii ... cela pourrait fonctionner. Il y a d'autres valeurs captives vs petites dans la table (T et t par exemple) ... Je me demande si une déclaration de cas pourrait le gérer. Comme code psuedo, cas où type = 'T' alors cas où isuppercase (type) = 1 alors 'T' sinon 't'. Je vais essayer anbd voir ce qui se passe – Twelfth