none
Tentativa de conversão de dados Char para DateTime, apresentando erro. RRS feed

  • Pergunta

  • Pessoal,

    Estou com a seguinte situação: em um ambiente com o SQL 2005 Express Inglês SP 2 instalado, ao tentar executar o seguinte comando na tabela Caixa:
    Update Caixa set DataHoraFechamento ='10/24/2008 17:25:00'

    Acontece a seguinte mensagem: "A conversão do tipo de dados char no tipo de dados smalldatetime resultou em um valor smalldatetime fora do intervalo"

     

    Essa coluna DataHoraFechamento na tabela Caixa é o tipo DateTime, porém podem perceber que o formato da data está Mes/dia/Ano.

    Se eu alterar para 24/10/2008 .... Dia/Mes/ano a alteração é aceita.

    MAS, em um outro ambiente com SQL 2005 Developer isso não ocorre, o primeiro comando com o formato da data Mes/dia/Ano não acontece o erro.

     

    Gostaria de saber o que pode estar afetando o SQL a converter esse tipo de dado, influenciado pela formato da DATA e HORA que está sendo colocado na instrução.

     

    Aguardo respostas, Grato.

     

    sexta-feira, 24 de outubro de 2008 19:28

Todas as Respostas

  • Diga Rafão,

    Essa diferença deve-se a configuração de "language" do usuario que você usou para fazer logon no SQL Server.

     

    CREATE LOGIN [Leivio] WITH PASSWORD=N'123',DEFAULT_DATABASE=[Model],

    DEFAULT_LANGUAGE=[Português (Brasil)]

     

    Veja se a configuração da Defaut language dos usuarios do servidores Express e Developer são iguais...conceteza não são.

     

    Espero ter ajudado!

    sexta-feira, 24 de outubro de 2008 19:43
  • Olá Rafão,

     

    O problema está relacionada ao Default Language do usuário comentado. Essa configuração fará diferença em alguns aspectos da sessão do usuário. Você pode alterar o Default Language ou rodar um SET DATEFORMAT DMY para garantir o formato desejado, mas particularmente não acho uma boa alternativa. Mudar o Default Language do usuário ou colocar o SET DATEFORMAT irá torná-lo dependente de configurações e isso não é muito desejável.

     

    Adotar um formato que independa de qualquer configuração é a melhor opção, pois, será um item a menos para se preocupar. Eu sugiro que você tente o seguinte:

     

    Update Caixa set DataHoraFechamento ='20081024 17:25:00'

     

    Esse comando fará o UPDATE corretamente independente do Default Language ou qualquer outra configuração.

     

    [ ]s,

     

    Gustavo

    sábado, 25 de outubro de 2008 00:38
  •  

    Bom dia,

    Foi de ótima ajuda sim, eu verifiquei e no ambiente que o problema não ocorre fui em propriedades do SQL Service(MSSQLSERVER), na guia Avançado o campo Language esta: 1033, o mesmo campo no cliente(onde ocorre o problema) esta: 1046 só que não consegui achar uma forma de mudar isso.

     

    Cheguei a logar no query com o usuario que a minha aplicação usa e executei o comando de alterar o formato: set dateformat mdy, porém o erro persistiu.

     

    Será que existe algum outro lugar que possa estar afetando?

    segunda-feira, 27 de outubro de 2008 13:49
  • Olá Rafão pode ser queo campo que está alterando não seja um campo data tente usar o seguinte:

     

     

    CONVERT(varchar(30), 'sua data e hora', 103)

    segunda-feira, 27 de outubro de 2008 15:10
  • Olá,

     

    Continuo sugerindo utilizar o formato que descrevi. Você ficará imune a qualquer configuração e não terá de se preocupar com detalhes como esse. O que você tem que fazer caso não possa alterar o formato, é clicar no login de sua aplicação e deixar o Default Language semelhante ao do login que está funcionando.

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 27 de outubro de 2008 15:13
  • Jovens,

    Muito obrigado pelas dicas, foram de muita utilidade...

     

    Consegui achar a solução do problema pelo link:
    http://www.friendship.com.br/Blog/tabid/69/EntryID/11/Default.aspx

     

    espero que possa ajudar em algo.

     

     

    Grnade abraço

    segunda-feira, 27 de outubro de 2008 18:17