SQL Server代理错误:"将varchar数据类型转换为datetime数据类型导致超出范围。"

3
我创建了一个小脚本,在SQL Server Management Studio中运行正常,然后我使用相同的脚本创建了一个SQL Server Agent作业;但是在运行后,我遇到了一个错误:

将varchar数据类型转换为datetime数据类型时发生了超出范围的情况。

我通过将日期格式更改为ISO 8601来解决了这个问题,但我不知道我的第一个脚本在SSMS上如何运行而在SQL Server Agent上运行失败。

第一个脚本:

declare @teste datetime
set @teste = '31/12/2099 00:00:00'
select @teste

修复错误:

declare @teste datetime
set @teste = '20991231 00:00:00'
select @teste
1个回答

2
这就是为什么在使用日期(时间)数据类型时使用明确的格式非常重要的原因之一。无论语言和数据类型如何,SQL Server中唯一明确的格式是yyyyMMddyyyy-MM-ddThh:mm:ss

对于日期'31/12/2099 00:00:00'以及您登录所使用的语言,SQL Server似乎将该值解释为2099年第31个月的第12天。一年中没有31个月,因此会出现错误。(DB<>Fiddle)。值得注意的是,date(和其他“新”的日期时间数据类型)的行为不同,并且还可以明确地理解格式yyyy-MM-dd;请注意在这个DB<>fiddle中由于语言设置而导致datetime值的差异。

正如您所看到的,解决方案是使用明确的格式。因此,由于您正在使用日期和时间,建议使用字符串'2099-12-31T00:00:00'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接