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

Sql 从存储过程中的字符串转换日期和/或时间时,转换失败,sql,sql-server,string,datetime,stored-procedures,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 englis

所以我尝试运行这个查询

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
我的存储过程有两个datetime参数:

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为什么要将我的输入参数从字符串转换为日期,因为它们已经是字符串了。

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'

没有。

在执行存储过程之前,您是否从试图设置
@dataStart
的行中得到错误?另外,作为旁注,您应该避免使用
sp
作为前缀-它是为microsofts系统过程保留的。@marc_不,我从另一个查询中调用它。。。如果您运行第一个查询,您将看到dataStart和dataFinal转换为datetime没有问题,然后当我将它们传递给SP时,我得到了错误。@Damien_不信者从我设法找到的SP中找到了“AS”字符。如果不是从我的答案中的指示行,然后是您没有向我们展示的代码,因为在您展示的存储过程代码中,没有尝试在字符串和
datetime
值之间进行转换或比较。首先有选择地注释掉行并执行,直到您找出导致错误的行。我猜您需要显式的
CONVERT
将这些字符串文本转换为
DATETIME