从存储过程中的字符串转换日期和/或时间时转换失败

时间:2014-07-15 07:55:59

标签: sql sql-server string datetime stored-procedures

所以我尝试运行此查询

ALTER PROCEDURE [dbo].[sp_ImportMonetareWinmentor]
    @dataStart datetime ,
    @dataFinal datetime
AS

    set language english
        declare @erroare int

        if(@dataStart > @dataFinal) set @erroare = -1;  set language english
        declare
                  @dataStart datetime = '2011-05-15T00:47:00' ,
                  @dataFinal datetime = '2011-05-17T15:43:00'
                  print @dataStart 
                  print @dataFinal
                  EXEC [sp_ImportMonetareWinmentor] @dataStart,@dataFinal

我的存储过程有两个日期时间参数:

ALTER PROCEDURE [dbo].[sp_ImportMonetareWinmentor]
    @dataStart datetime ,
    @dataFinal datetime
AS
set language english
    declare @erroare int

    if(@dataStart > @dataFinal) set @erroare = -1;
            else begin  
                print('Procedure')
        return @erroare
                end
        -- Insert statements for procedure here
    END

知道我为什么会收到错误

  

从字符串转换日期和/或时间时转换失败。

我知道它与日期时间有关,但是我无法看到我做错了什么,或者为什么SQL想要将我的输入参数从字符串转换为日期,因为它们已经是字符串

1 个答案:

答案 0 :(得分:2)

YYYY-MM-DD hh:mm并不明确,就SQL Server而言 - 它有时会尝试将其解释为YYYY-DD-MM hh:mm,因此当它不知道第17个月是哪个时会跳过。尝试:

declare
      @dataStart datetime = '2011-05-15T00:47:00',
      @dataFinal datetime = '2011-05-17T15:43:00'

证明问题。这样:

set language british
go
declare
          @dataStart datetime = '2011-05-15 00:47',
          @dataFinal datetime = '2011-05-17 15:43'

生成错误。这样:

set language english
go
declare
          @dataStart datetime = '2011-05-15 00:47',
          @dataFinal datetime = '2011-05-17 15:43'