2008-09-26 9 views

Respuesta

7

¿Qué tal:

ALTER DATABASE database_name COLLATE collation_name 

Ver BOL para un list of collation options y escoger el mayúsculas y minúsculas que mejor se adapte a sus necesidades (es decir, el que su cliente está utilizando).
Obviamente, es probable que sea una buena idea hacer una copia de seguridad completa de su base de datos antes de intentar esto. Nunca he intentado usar una base de datos con una intercalación diferente a la intercalación predeterminada del servidor, así que no sé de ningún "truco". Pero si tiene buenas copias de seguridad y las prueba en su entorno antes de implementarlas en su cliente, no puedo imaginar que haya mucho riesgo involucrado.

0

Tendrás que cambiar la intercalación de la base de datos. También deberá modificar la clasificación de tabla y columna. Creo que puedes encontrar un script allí si lo googleas.

14

No es necesario que cambie la intercalación en toda la base de datos, si la declara en la tabla o columnas que deben distinguir entre mayúsculas y minúsculas. De hecho, puede anexarlo a operaciones individuales según sea necesario.

 
SELECT name WHERE 'greg' = name COLLATE Latin1_GENERAL_CS_AS 

que sé, usted ha dicho que desea que esto se aplica en toda la base de datos. Pero menciono esto porque en ciertos entornos alojados, no puede controlar esta propiedad, que se establece cuando se crea la base de datos.

+2

pero no lo haga aplicando LOWER() a la columna, de lo contrario no podrá usar un índice ... –

+0

Ah, gracias por la sugerencia. Adapte esa línea de un script que uso ... pero arreglaré la muestra. – harpo

1

Si tiene una base de datos que tiene una clasificación diferente a la predeterminada de la instancia, puede tener problemas al intentar unir sus tablas con las temporales. Las tablas temporales tienen una intercalación de la instancia (porque son objetos del sistema) por lo que debe usar la cláusula COLLATE database_default en sus uniones.

select temp.A, table.B 
from #TEMPORARY_TABLE temp inner join table 
on temp.X COLLATE database_default = table.Y 

Fuerza al cotejo de temp.X (en este ejemplo) para la intercalación de la DB actual.

Cuestiones relacionadas