Dado:
Consulta nº 1:
begin tran
UPDATE [dbo].[t] SET [mydatetime]='2011-12-25 07:00:00.000';
rollback
Consulta #2: (alterando mês/dia)
begin tran
UPDATE [dbo].[t] SET [mydatetime]='2011-25-12 07:00:00.000';
rollback
Por que a CONSULTA nº 1 falha ao ser executada em um novo SQL Server instalado enquanto a consulta nº 2 é executada com êxito?
Msg 242, Level 16, State 3, Line 6 Bei der Konvertierung eines varchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs.
Em comparação, por que a consulta nº 1 é executada no servidor antigo, enquanto a consulta nº 2 falha no novo servidor?
Msg 242, Nível 16, Estado 3, Linha 7 A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo.
Os servidores possuem versões diferentes (2008/2016). E como você pode ver nas mensagens de erro, existem dois idiomas diferentes instalados. Por favor, não me diga que só porque o idioma da instalação do Sql-Server é diferente, ele não é capaz de lidar com diferentes formatos de data?
Isso é configurável? Vou me safar com formatos uniformes como 20150129 08:00:00.000?
Você pode lidar com o problema especificando o estilo e fazendo uma conversão explícita
CONVERT()
de string para data e hora em vez de uma conversão implícita. https://msdn.microsoft.com/en-us/library/ms187928.aspxUPDATE dbo.t SET mydatetime = CONVERT('2011-12-25 07:00:00.000', 121)