En este artículo vamos a identificar las limitaciones de los tipos de datos datetime y smalldatetime en versiones anteriores de SQL Server y con la nueva versión de SQL Server 2008 veremos como corregir estas limitaciones.
Recuerden que para trabajar con estos ejercicios deben de descargar las máquinas virtuales que nos provee Microsoft en la siguiente dirección: http://msdn2.microsoft.com/es-mx/bb851668.aspx
Vamos a iniciar nuestra máquina virtual y ejecutemos SQL Server Management Studio ubicado en el grupo de programas Microsoft SQL Server code name Katmai.
Podemos utilizar la base de datos que creamos en el artículo anterior denominada LABDB, si no cuentan con la base de datos la pueden crear desde cero. Después de esto crearemos una nueva tabla llamada tbl_historicalEvents, para hacer esto vamos a ejecutar la siguiente sentencia:
USE LABDB
GO
if object_id('tbl_historicalEvents') is not null
drop table tbl_historicalEvents
create table tbl_historicalEvents (EventID int IDENTITY (1,1), Eventname nvarchar(200), Eventdate datetime)
Ahora que tenemos la nueva tabla vamos a insertar datos:
insert into tbl_historicalEvents (Eventname, Eventdate)
values ('Cumpleaños de Wolfgang Amadeus Mozart', '01/27/1756')
insert into tbl_historicalEvents (Eventname, Eventdate)
values ('Declaración Universal de los Derechos Humanos', '12/10/1948')
insert into tbl_historicalEvents (Eventname, Eventdate)
values ('Cumpleaños de Johan Sebastian Bach', '03/21/1685')
Como ya se habrán dado cuenta (supongo) se van a encontrar con un espantoso error:
Msg 242, Level 16, State 3, Line 17 The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
Pues este error se debe a que estamos intentado insertar un valor que está fuera del alcance para el tipo de dato datetime ya que este está determinado entre 1753-01-01 al 9999-12-31
Con SQL Server 2008 nos vamos a olvidar de esto ya que ha sido modificado el alcance a través del nuevo tipo de dato date
Regeneramos nuestra tabla mediante la siguiente instrucción:
USE LABDB
GO
if object_id('tbl_historicalEvents') is not null
drop table tbl_historicalEvents
create table tbl_historicalEvents (EventID int IDENTITY (1,1), Eventname nvarchar(200), Eventdate date)
Ahora insertamos nuevos datos a nuestra tabla, noten que para la columna Eventdate hemos cambiado el tipo de dato datetime por el tipo de dato date
insert into tbl_historicalEvents (Eventname, Eventdate)
values ('Cumpleaños de Wolfgang Amadeus Mozart', '01/27/1756')
insert into tbl_historicalEvents (Eventname, Eventdate)
values ('Declaración Universal de los Derechos Humanos', '12/10/1948')
insert into tbl_historicalEvents (Eventname, Eventdate)
values ('Cumpleaños de Johan Sebastian Bach', '03/21/1685')
Como verán ya no tendremos ningún error, esto es que gracias al nuevo tipo de dato date incluido en SQL Server 2008 tiene un alcance para las fechas comprendidas del 0001-01-01 al 9999-12-31
Espero que esto sea de utilidad y ahora si tenemos mucho trabajo con todo esto de los nuevos lanzamientos de Microsoft, hay que explotar al máximo estas nuevas bondades de SQL Server y como siempre los invito a que participen, nos estamos leyendo en la próxima entrega de este artículo.
Saludos y Feliz Codificación!
Víctor Alameda
Microsoft Certified Solution Developer