Sql Datetime throw将数据类型varchar转换为datetime时出错

时间:2014-03-11 19:36:17

标签: sql sql-server datetime

我有这个存储过程

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET DATEFORMAT DMY -- This line of code was added by my trying to avoid the problem
GO

ALTER PROCEDURE dbo.sp_Hotel_RegistroHuesped 
-- Add the parameters for the stored procedure here
  @p_accion                             int 
, @p_IdRegistroHuesped                  numeric (18,0)
, @p_IntIdHabitacion                    int 
, @p_CheckInFecha                       datetime 
, @p_CheckOutFecha                      datetime
, @p_CheckOutFechaEsperada              datetime 
, @p_NumIdTerceroCondicionesComerciales int 
, @p_StrUsuarioCrea                     usuario  = suser_sname
, @p_DatfechaCrea                       datetime = getdate
, @p_StrUsuarioModifica                 usuario  = NULL
, @p_DatFechaModifica                   datetime = NULL
, @p_ListaHuespedes                     char(400)= null
AS
BEGIN

END     

对我来说没有什么特别的或奇怪的,但是当我尝试像这样执行时我真的被卡住了

set dateformat dmy 

exec dbo.sp_Hotel_RegistroHuesped 
    @p_accion=1,
    @p_IdRegistroHuesped=0,
    @p_IntIdHabitacion=37,
    @p_CheckInFecha='11/03/2014 21:48:28.301',
    @p_ListaHuespedes='',
    @p_CheckOutFecha=NULL,
    @p_CheckOutFechaEsperada='11/03/2014 22:48:28.301',
    @p_NumIdTerceroCondicionesComerciales=1

总是抛出

  

Mens 8114,Nivel 16,Estado 1,Procedimiento sp_Hotel_RegistroHuesped,Línea0
  将数据类型varchar转换为datetime时出错

这是我正在尝试的变种

set dateformat dmy 
exec dbo.sp_Hotel_RegistroHuesped 
    @p_accion=1,
    @p_IdRegistroHuesped=0,
    @p_IntIdHabitacion=37,
    @p_CheckInFecha='11/03/2014 21:48:28',
    @p_ListaHuespedes='',
    @p_CheckOutFecha=NULL,
    @p_CheckOutFechaEsperada='11/03/2014 22:48:28',
    @p_NumIdTerceroCondicionesComerciales=1

只需删除毫秒部分。

执行此sp的正确方法是什么?

1 个答案:

答案 0 :(得分:7)

由于您使用('11/03/2014 22:48:28')的日期格式转换取决于语言设置(日/月等顺序),因此最好使用ISO标准应正确识别的日期格式 - YYYY-MM-DDTHH:MM:SS

'2014-03-11T22:48:28'