SqlDateTimeOverFlow error

本文关键字:error SqlDateTimeOverFlow | 更新日期: 2023-09-27 18:27:12

>ERRORI 想在表中插入员工信息。有一个名为 DateHired 的字段名称。即使我们插入了正确的日期,它也向我们显示错误说错误 - SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。我现在应该做什么,我应该检查什么?

SqlDateTimeOverFlow error

最明显的问题,我将在这里假设日期被推为字符串。如果我错了,其余的可能不适用于您,但它可能会帮助其他人:-(

确保您没有混淆美国和世界其他地区的格式。例如,12/31/9999 在英国区域设置中无效,因为它应该是 31/12/9999。前者将给出溢出/超出范围的错误(因为没有 31 个月(。

如果您需要将日期作为字符串推送,最安全的方法是使用 ISO 格式,即: yyyy-mm-ddThh:mm:ss ,例如:2015-12-17T08:30:00。将日期与时间分开的"T"很重要。没有它,本地区域设置规则将再次启动。

第二种安全的方法,特别是当我们谈论美国与英国时,是命名月份,即"17 Dec 2015"。如果我们查看美国/英国与法国,这是行不通的,但对于以英语为中心的应用程序来说没关系。

最后,确保应用使用正确语言的登录名连接到 SQL 数据库。以应用程序连接的用户身份执行DBCC USEROPTIONS - 这将告诉您用户正在使用的语言和日期格式。可以通过 SSMS(安全 -> 登录名 -> [查找用户] ->属性 ->默认语言(进行更改。

有些人可能会建议使用 SET DATEFORMAT 来解决此问题 - 但这在大量使用时会带来危险,尤其是在存储过程中:SET DATEFORMAT强制在每次执行时重新编译执行计划(如 Microsoft 的白皮书 SQL Server 2008 中的计划缓存中所述 - 向下滚动到"影响计划重用的因素"(,因此对性能有不利影响