鉴于:
查询 #1:
begin tran
UPDATE [dbo].[t] SET [mydatetime]='2011-12-25 07:00:00.000';
rollback
查询 #2:(更改月份/日期)
begin tran
UPDATE [dbo].[t] SET [mydatetime]='2011-25-12 07:00:00.000';
rollback
为什么 QUERY #1 无法在新安装的 SQL Server 上运行,而查询 #2 成功运行?
Msg 242,Level 16,State 3,Line 6 Bei der Konvertierung eines varchar-Datatyps in einen datetime-Datatyp liegt der Wert außerhalb des gültigen Bereichs。
相比之下,为什么查询 #1 在旧服务器上运行而查询 #2 在新服务器上失败?
消息 242,级别 16,状态 3,第 7 行将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
服务器有不同的版本(2008 / 2016)。正如您从错误消息中看到的那样,安装了两种不同的语言。请不要告诉我仅仅因为 Sql-Server 安装的语言不同就不能处理不同的日期格式?
这是可配置的吗?我会摆脱像 20150129 08:00:00.000 这样的统一格式吗?
CONVERT()
您可以通过指定样式并执行从字符串到日期时间的显式转换而不是隐式转换来处理该问题。https://msdn.microsoft.com/en-us/library/ms187928.aspxUPDATE dbo.t SET mydatetime = CONVERT('2011-12-25 07:00:00.000', 121)