2012-07-25 32 views
5

Tengo el siguiente interfaz de procedimiento:Error tipo de datos convertir nvarchar a fecha y hora

Create procedure [dbo].[InsertItemDetails] 
    @TimeItemAdded datetime 

Cuando me llame de esta manera:

EXEC [dbo].[InsertItemDetails] 
    @TimeItemAdded = N'20/07/2012 00:00:00'; 

consigo este error:

Msg 8114, Level 16, State 5
Error converting data type nvarchar to datetime.

+0

¿Qué valor se le de paso a la '' @TimeItemAdded parámetro en 'InsertItemDetails'? – LittleBobbyTables

+0

20/07/2012 00:00:00 como la fecha y la hora –

Respuesta

10

Según la configuración regional, es posible que no se reconozca el parámetro que está pasando para @TimeItemAdded.

Debe pasar la fecha como:

20120720 
+0

aplausos, problema resuelto, lo aceptaré en 9 minutos –

+2

Este no es un formato seguro. 'CONFIGURAR EL IDIOMA FRANCÉS; SELECT CONVERT (DATETIME, '2012-07-20 00:00:00'); 'produce' Msg 242, nivel 16, estado 3, línea 2; La conversión de un tipo de archivo varica en tipo de fecha y hora a una fecha un valor hors limita. Los formatos seguros para fecha y hora son 'AAAAMMDD' o' AAAA-MM-DDTHH: MM: SS.nnn' - que 'T' es importante. –

+0

@ Aaronofertrand - fascinante; eliminó el tiempo de coherencia – LittleBobbyTables

2

utiliza una cadena literal inequívoco para su fecha. En este caso:

EXEC dbo.InsertItemDetails 
    ... 
    , @TimeItemAdded = '20120720'; 

Mejor aún, asegúrese de pasar un parámetro fuertemente tipado donde sepa que la fecha es correcta. Lo ideal es que nunca se presente como una cadena en ningún formato.

formatos regionales como m/d/y son malas noticias, porque no se puede garantizar que van a servir, ya la sesión del usuario, dateformat, configuración de idioma, la configuración regional en la máquina, etc.

0

Este enlace tiene todos los formatos de fecha y hora, sus condados http://www.sql-server-helper.com/tips/date-formats.aspx

Puede pasarlo como un varchar y convertirlo explícitamente a una fecha y hora usando el código de formato de fecha correcto. Por ejemplo:

SELECT CONVERT(DATETIME, '20/07/2012 00:00:00', 103) 

103 es el código de fecha y hora que está buscando.

+1

No estoy de acuerdo con que deba cambiar el parámetro a varchar. Repare el formato (o use el tipo de datos correcto) lo antes posible. Si cambia el parámetro a varchar, las personas pueden pasar lo que quieran. 'mm/dd/aaaa' se romperá, por ejemplo; '07/07/2012' solo almacenará la fecha incorrecta en silencio, y' 20/07/2012' generará una excepción. –

0

SQL leer su fecha como 7/20/2012 cual no es válido, puede pasar sus objetos de fecha con el formato más seguro yyyy-MM-dd por ejemplo: 2012-07-20

Cuestiones relacionadas