Sql server 旧服务器上没有问题,但新服务器上出现此错误:将varchar数据类型转换为datetime数据类型导致值超出范围

Sql server 旧服务器上没有问题,但新服务器上出现此错误:将varchar数据类型转换为datetime数据类型导致值超出范围,sql-server,iis,server,Sql Server,Iis,Server,当我在新服务器上重新部署应用程序时,会出现此错误,但在旧服务器上或在本地运行我的应用程序时,效果很好。IIS或SQL server中是否有我必须更改或在新服务器上重新安装的设置?我怀疑语言设置,并且您对日期和时间数据类型使用了不明确的varchar格式。解决方案是找到问题发生的地方并进行修复(这样您就不会使用模棱两可的格式)。在SQL Server中只有两种明确的格式:yyyyMMdd和yyyy-MM-ddThh:MM:ss.nnnnnnn当您将日期(时间)值作为字符串传递,而不是使用更合适的数

当我在新服务器上重新部署应用程序时,会出现此错误,但在旧服务器上或在本地运行我的应用程序时,效果很好。IIS或SQL server中是否有我必须更改或在新服务器上重新安装的设置?

我怀疑语言设置,并且您对日期和时间数据类型使用了不明确的
varchar
格式。解决方案是找到问题发生的地方并进行修复(这样您就不会使用模棱两可的格式)。在SQL Server中只有两种明确的格式:
yyyyMMdd
yyyy-MM-ddThh:MM:ss.nnnnnnn
当您将日期(时间)值作为字符串传递,而不是使用更合适的数据类型时,就会出现问题。理想情况下,您可以在用户输入字符串后尽可能早地对其进行一次解析,并在显示字符串时尽可能晚地对其进行格式化,其他任何地方都可以使用
DateTime
DateTime2
数据类型。出现此错误是因为您强制SQL重新解析字符串中的日期。另一种可能是您的varchar数据无法转换为datetime,并且旧/新执行计划不同,因此尝试在新服务器计划中更早地进行转换。您需要更正数据,最好使用正确的数据类型;不要使用
varchar
表示日期和时间值。使用日期和时间数据类型。在SQL中使用
varchar
的唯一时间是在初始赋值时(例如
SET@Date='20201124';
)。到达SQL实例时,应用程序中的值应该已经是正确的数据类型。除了上面的注释中提到的以外,数据库语言设置可能还有另一个问题。如果将英语设置为默认语言,SQL Server希望日期为MM/DD/YYYY格式。其他语言可能需要DD/MM/YYYY格式。当提供的内容与SQL Server期望的内容不匹配时,SQL Server会生成此错误。