Tengo una aplicación (que no puedo modificar) que almacena la hora en una tabla sql server como tipo de datos smalldatetime, pero la almacena con fecha 1899-12-30 y de lo que tengo entendido esto no debería ser posible, puesto que el valor mínimo de small datetime es 1900-01-01. Necesito que se almacene con fecha 1900-01-01
1 Respuesta
Respuesta de jalvaradog
1
1
jalvaradog, Javier Alvarado Especialista en infraestructura, servidores...
Primero. Perdón por la tardanza. ¿La aplicación no la puedes modificar? ¿Pero la base de datos? ¿Qué version es la base de datos? Y mi ultima pregunta.. Necesitas almacenar la información con la fecha 1900-01-01 00:00:¿00?
Hola experto, Gracias por tu atención, La aplicación no la puedo modificar. La base de datos sí. La aplicación funciona perfectamente con la base en Access, y tiene la opción de elegir el Microsoft OLEDB Provider, escojo el provider for SQL Server y "paso la base a SQL" y tengo el problema que menciono, Me dieron una solución que es pasar la base a SQL 2005, porque en SQL 2000 sí da ese error. Voy a probar esto ahora, pero como soy totalmente nuevo en SQLServer, tal vez me demore una semana, (Por que además estoy instalando una copia "sin costo" de SQL server 2005) Y sí, también tengo que almacenar la fecha 1900-01-01 00:00:00 Otra solución que me dio un experto es que puedo agregar un trigger con la opción INSTEAD OF al momento de insertar o modificar datos en la tabla. Pero igual no funcionaba, Saludos y gracias nuevamente,
Estimado experto: Parece que el problema se da con SQL Server 2005 sobre Windows Vista y Windows 2003 Server, y con SQL Server 2000 sobre windows XP. Funciona bien con SQL 2005 sobre Windows XP. ¿Puede ser que la combinación de la versión de SQL Server y el sistema operativo provoque este tipo de error? Porque por el mensaje de error, el sistema trata de convertir una fecha con formato char a formato datetime, pero no lo reconoce como formato fecha y por eso se produce el error. ¿Hay alguna forma de cambiar la configuración regional para que reconozca este formato como fecha y lo pueda almacenar como datetime? Gracias nuevamente,
Realmente no he visto que el error que comentas sea por la version de sistema operativo, yo uso SQL Express 2005 SP2 sobre windows vista para testeo de algunas aplicaciones y no tengo ese problema, ahora bien, si el tema es por conversión de datatypes que es muy común al momento de programar la aplicación para frontend de usuario, seria mejor hacer algún cast() para transformar el datatype char a datetyme, pero esto tiene que ser a nivel de la base de datos... si es que usas storeprocedures para comunicarte con tu aplicación... Tambien la conversion de datatypes se hace en la aplicacion, por ejemplo, yo desarrollo en C#, cuando tengo una tabla en MSSQL, en la aplicacion tengo que mandar los mismos datatypes, normalmente cuando mando una fecha uso la funcio Convert. ToDateTime() poniendo el valor de la variable que voy a convertir, aun cuando la mande en algun formato entendible para SQL, recuerda que algunas aplicaciones usan un lenguaje entendible para el usuario, para ellos no es entendible - 2010-05-27 10:01:00 - ellos prefieren ver un - Jueves 27 de Mayo del 2010 - ó - 27/05/2010 - si la aplicacion no hace la conversion entonces salta la excepción, ya que SQL esta esperando un formato entendible esto es yyyy-mm-dd ó yyyy-dd-mm en Ingles. Si es cuestión o tema de configuración regional, ¿en qué idioma esta tu version de SQL? En teoría debería de ser misma que el sistema operativo... si no en el panel de control del SO trata de configurar las opciones de configuración regional para que sea traducible.
Estimado experto: Gracias por tu tiempo, Mi SO es Windows Vista Business en inglés y SQL 2005 lo tengo en español. Cambié la configuración regional del formato dd/MM/yyyy a dd-MM-yyyy y funcionó. Se escriben los datos en la base sin ningún problema. Luego volví a cambiar la configuración regional a "/" en lugar de "-" y tampoco tengo el problema. Muchas gracias por tu atención, el saber que uno no está solo en estos problemas es de gran ayuda. Adiós