Cuidado con el GETDATE en Azure SQL

horas

Esto realmente no es un error, pero me ha ocurrido en un proyecto de migración de una SQL 2012 a SQL Azure, al encontrarme migrando procedimientos almacenados que constituían realmente la migración de una Aplicación.

Y migrar una Aplicación a Azure, o al Cloud en general, casi seguro que va a tener efectos inesperados como el que describo en esta entrada.

¿Qué hora es?

Una de las cosas más comunes que realizamos todos los que hemos desarrollado alguna vez en T-SQL es utilizar la función GETDATE() para obtener la fecha del sistema.

En este proyecto se ha utilizado profusamente en los múltiples SP que componen la capa de lógica de negocio. Y desde el primer momento nos dimos cuenta que había un problema con la zona horaria.

Y es que, por defecto, Azure SQL utiliza la zona de UTC, y no hay forma de cambiarla.

Osea, es algo a tener en cuenta cuando se vaya a realizar una migración de Procedimientos Almacenados y aplicar las soluciones que sean necesarias.

Soluciones

La más sencilla de ellas (de las soluciones), sería hacer una función en T-SQL que haga la transformación y que todos los SP llamen a esta en vez de a GETDATE(). Pero cuidado, en este caso hay que tener en cuenta los cambios horarios estacionales que disfrutamos en España, y que tiene un impacto en el rendimiento.

También se podría hacer con técnicas de T-SQL más avanzadas, pero que están fuera de mi alcance y conocimiento.

En mi opinión, lo más correcto, y que requiere de procesos de transformación y creación, sería trabajar en el backend siempre en UTC y realizar los cambios en la UI de acuerdo a la Cultura del usuario.

Espero que sea de ayuda

 

Anuncios

2 comentarios en “Cuidado con el GETDATE en Azure SQL

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s