2010-10-04 16 views
14

Tengo una tabla que se origina en un antiguo sistema heredado que fue mayúscula, en particular una columna de estado donde 's' = 'Programar importación' y 'S' = ' Programar la gestión '. Esta tabla finalmente llega a una base de datos de SQL Server 2000 con la que puedo consultar. Mi consulta es relativamente simple sólo va para el recuento de ...Forzar consulta de T-SQL para que distinga entre mayúsculas y minúsculas en MS

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

Esta es agrupar los recuentos de 'S', junto con los recuentos de la 's'. ¿Hay alguna manera de forzar una consulta para que sea sensible al límite? Tengo acceso a ambos entornos de SQL Server 2000 y 2005 para ejecutar esto, sin embargo, tengo capacidad de administración limitada en el servidor (por lo que no puedo configurar los atributos del servidor) ... Creo que podría mover los datos a mi local y configurar algo en mi local, donde tengo acceso completo a las opciones del servidor, pero preferiría una solución tsql.

+0

'alter database your_database collate Latin1_General_CS_AS' – pascal

+1

SQL Server 2003 ?? Sólo sé 2000, 2005, 2008, 2008 R2 .... –

+0

Lamentablemente no tengo permisos para alterar el pascal de la tabla, aunque creo que eso funcionaría – Twelfth

Respuesta

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 

Usted puede hacer esto con =, like, y otros operadores también. Tenga en cuenta que debe modificar la lista de selección porque ya no está agrupando por trans_type, ahora está agrupando por trans_type collate SQL_Latin1_General_CP1_CS_AS. Tipo de gotcha.

+0

La mejor solución que puedo ver si funciona ... gracias Ian – Twelfth

1

¿Puede introducir una columna trans_type_ascii con el valor ascii de trans_type y el grupo en su lugar? O cualquier otra columna que pueda usar (isUpperCase) para distinguirlos.

+0

Gracias Beth. No puedo modificar las tablas existentes, pero crear una tabla temporal y cargarla con los valores ascii ... eso podría funcionar. Hay otros valores pequeños vs. pequeños en la tabla (T y t, por ejemplo) ... Me pregunto si una declaración de caso podría manejarlo. Como código psuedo, case cuando type = 'T' then case when iscase (type) = 1 then 'T' else 't'. Voy a intentarlo y ver qué pasa. – Twelfth

Cuestiones relacionadas