Está en la página 1de 4

Problemas Del Lenguage En SQL Server 2005

Siendo esta mi primera entrega de este nuevo Blog, quisiera poder solucionar ese típico
problema del migrador de aplicaciones que suele tener un problema muy común:
Lenguage en SQL Server 2005. Y es que cualquiera que sea nuestro caso de migración,
la vida (Cambio a un nuevo servidor por ejemplo) o el destino (Cambio de ambiente de
mi aplicación por ejemplo) en ocasiones cometemos un error que nos puede causar más
de un inconveniente!!.

El caso es: En nuestro nuevo servidor instalamos sistema opertativo, los nuevos
paquetes, entre esos el servidor de SQL 2005, los componentes utilizados por mi
aplicación, la aplicación en si y luego la levantamos (A nuestra aplicación por supuesto)
hasta ahi 0 problemas, comenzamos a probar el funcionamiento de la aplicación y se
nos ocurre realizar una consulta que tenga que ver con fechas...."ERROR con el formato
de fechas 'mm/dd/yyyy'". Pero que pasó???? lo primero que se nos viene a la mente es:
algo con el Lenguage del sistema operativo, ir a configuración regional y de idiomas y
probar. Pero NO!!! ese realmente no es el causante de nuestras penas, el verdadero
causante fue el personaje (normalmente nosotros mismos) que instaló el paquete de
SQL Server 2005 con un lenguaje distinto al de el servidor de origen. Que hacer
entonces???? Pues instalar todo de nuevo?? esa sería una solución, pero seguramente no
las más adecuada.

Primero que nada...en que formato de fechas se encontraba nuestra aplicación


antiguamente??? Pues bien para este caso el formato de las fechas que se encontraba
originalmente será 'dd/mm/yyyy'. Y ahora queremos hacer una consulta y nos sale el
error de 'mm/dd/yyyy'???
Vamos a comenzar nuestro estudio entonces.

El formato de fechas esta completamente atado al lenguaje con el que esta corriendo
nuestro servidor SQL, NO al lenguaje de instalación, ni con el que leemos las opciones
de las herramientas de sql, ni con el collation!!! Es el lenguaje que esta corriendo
nuestro servidor!!! Como averiguamos ese dato??? pues hay que correr el siguiente
script sql en nuestro famoso Microsoft Sql Server Managmente Studio (SQL SMS pa la
proxima):

select @@language

Y obtendremos ese lenguaje, en mi caso: us_english. Listo ahora sé que el lenguaje con
el que corre mi servidor es el inglés. Ahora como sé que formato de fechas es el que
está atado a mi servidor?? corramos entonces el siguiente query!! o store procedure (sp
pa la proxima) del sistema.

sp_helplanguage 'us_english'

Obtendremos toda la información acerca de este idioma. Entre esos su código, su


formato de fecha, el nombre, su alias, sus nombres de meses, sus nombres de meses
cortos, etc. Por cierto si corremos solo el sp sp_helplanguage sin parametros el resultado

1
es la información acerca de todos los lenguajes posibles instalados en nuestro SQL
2005. Pero para muestra un botón:

Aca esta el resultado de nuestra consulta completa.

"Lindo hasta ahora todo lindo, pero no se me ha solucionado absolutamente NADA!!!!"


si lo sé, ahora vamos. Una solución parcial sería utilizar la siguiente sentencia antes de
correr cualquier sentencia SQL de nuestra aplicación:

set dateformat dmy

Sin emabargo como notarán para este caso es una solución muy parcial, muy
superficial!!! Nos tocaría cambiar todas las sentencias para que antes de que corran
ellas, primero corra nuestra sentencia set date format dmy.

Bueno esta no fue!!! veamos que más podríamos hacer!!! Vamos a utilizar la siguiente
sentencia, que es una solución menos parcial!!! Voy a setear lenguaje español porque
ese lenguaje está atado con la fecha en el formato que yo quiero 'dd/mm/yyyy' o dmy
-sino me creen ejecuten el sp sp_helplanguage-.

SET LANGUAGE Español

Hey ahora funcionan todas las consultas SQL!!! Todas las sentencias se ejecutan!!! Que
bien!! Arreglado el problema!! Ejecuto el select @@language y me dice ESPAÑOL!!!
POR FIN!!! Pues talvez no necesariamente. Probemos: bajemos los servicios SQL o
ingresemos con un usuario diferente a la base de datos y hagamos las consultas!!!Pues
otra vez dejo de funcionar :'(
sigue saliendo us_english como respuesta a mi select @@language!!!
Que pasó??? pues esta sentencia solo mantiene el cambio del lenguaje para la sesión del
usuario conectado en ese momento a la base de datos, por lo tanto al bajar los servicios
o al conectarse otro usuario distinto nuestra configuración se pierde. Entonces la
solución parcial para nuestro caso sería correr la sentencia set language
automáticamente después de que un usario se conecte a la base. Pero sigue siendo una
solución muy parcial para mi problema, menos que la anterior pero igual parcial!!!

Bueno, entonces ahora si viene la de verdad verdad!!!. Entramos al SQL SMS (ya saben

2
a que me refiero!!! Sql Server Managment Studio!!!) En el lado izquierdo se encuentra
nuestro árbol explorador de objetos, encontramos el nombre del servidor de nuestra base
y/o el nombre de mi instancia. Clic derecho -> Propiedades

Luego voy a la pestaña de avanzados, y veo la opción de lenguaje por defecto y


entonces cambio y escojo el de mi elección!!! En mi caso será español....para muestra
otro botón!!!

3
Si esta es la ventana de las que les hablaba. Entonces escogeremos el lenguaje de
nuestro servidor!!! OJO que es de nuestro servidor, es decir también modifica el
lenguaje de todas las bases de datos alojadas en este servidor (cuidado!!! por arreglar
una dañamos 3!!!) Pero si solo tenemos una BD como en nuestro caso, entonces
quedará perfecto!!!!. Listo el lenguaje de nuestro servidor esta modificado!!! Este será
el lenguaje por defecto de todos los nuevos logins creados!!! todos los NUEVOS logins
creados!!!. Si falta entonces un paso, cambiar el de los logins ya creados!!.

En nuestro object explorer vamos a la carpeta de seguridad y escojemos logins. Encima


del grupo o usuario clic derecho propiedades y en la pestaña de default lenguage
escojemos el lenguaje deseado, en nuestro caso el Español!!.

Repetimos el proceso para todos los logins de nuestro servidor, o si tenemos muchos
hacemos un script que modifique esta propiedad a todos los logins.

Ahora si probemos, TODO SIRVE ahora si TODO sirve. reiniciamos los servicios,
entremos con cualquier login :) TODO SIRVE.

Espero que les sirva, y espero también sus comentarios, preguntas y sugerencias!!!
Proximas ediciones tendrán que ver con el maravilloso mundo del desarrollo!!!
Auqnue siempre habrá una que otra de Bases de Datos!!! Hasta pronto!!!

También podría gustarte