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