none
Formato de data diferente ao utilizar select e update dentro de uma Stored Procedure?! RRS feed

  • Pergunta

  • Olá,
    Minha aplicação c# manda um datetime para a SP do SQL server com este valor e formato '18-02-2020 00:38:44'.
    Na SP o valor é recebido e armazenado na variável de nome @dataValor do tipo datetime e usado em 2 momentos.

    Momento 1

    insert into tabela (campo1, campo2, campoData)
    select campo1, campo2, @dataValor from tabela2 


    Momento 2

    update tabela 
    set campoData = @dataValor 
    where id = x


    No caso 1º onde temos um insert, o valor na coluna aparece como '18-02-2020 00:38:44', ou seja, igual ao valor de entrada.
    No caso 2º onde temos um update, o valor na coluna aparece como 02/18/20 00:38:44 AM, ou seja, diferente do valor de entrada.

    O que pode acontece aqui?

    Obrigado



    [Gosto de compartilhar problemas com soluções que encontro no dia de trabalho]








    • Editado TI DEV sexta-feira, 14 de fevereiro de 2020 17:39
    sexta-feira, 14 de fevereiro de 2020 17:36

Respostas

  • Olá,
    O que acontece é que são campos com tipos diferentes, pois estão em tabelas diferentes.

    Em tabela 1 o campo é do tipo smalldatetime.
    insert into tabela1 (campo1, campo2, campoData)
    select campo1, campo2, @dataValor from tabela2 

    Em tabela 2 o campo é do tipo nvarchar.
    update tabela2 
    set campoData = @dataValor 
    where id = x


    Resolvi o problema mudando o tipo da variável @dataValor na Sp para varchar (100).
    Com isto tanto o select quanto o insert possuem o mesmo valor para a coluna.

    Valeuuuus

    [Gosto de compartilhar problemas com soluções que encontro no dia de trabalho]

    • Marcado como Resposta TI DEV segunda-feira, 17 de fevereiro de 2020 12:16
    segunda-feira, 17 de fevereiro de 2020 12:15

Todas as Respostas

  • Boa tarde,

    Não sei se vou conseguir ajudar, mas qual é o tipo de dados da coluna campoData?

    Você visualizou os valores da linha do insert e da linha do update juntos no mesmo resultado de uma consulta?


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 14 de fevereiro de 2020 19:17
  • Toriyama,

    Teoricamente temos uma entrada de dados no formato '18-02-2020 00:38:44', atualização sendo feita no formato em 02/18/20 00:38:44 AM

    Quando você pergunta: "O que pode acontece aqui?"

    Poderia nos dizer o que esta tentando imaginar ou entender?

    Você já validou na sua base de dados, os dados estão sendo inseridos e atualizados corretamente? E a apresentação dos mesmos?

    Pois na verdade para o SQL Server não existe um formato de armazenamento de dados, tudo se torna basicamente um binário, o que existe são os formatos de apresentação que definimos em nossas aplicações.

    Um simples teste, se pegarmos os valores que você esta informando e passarmos para duas variáveis, teremos uma mensagem de erro relacionada ao primeiro valor:

    Declare @DataInsert DateTime = '18-02-2020 00:38:44',
            @DataUpdate DateTime = '02/18/20 00:38:44 AM'
    
    Select @DataInsert, @DataUpdate

    Sua aplicação esta realizando alguma conversão ou tratamento dos valores antes de inserir os mesmos?

    Tem certeza que o campo2 é do tipo DateTime?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]




    sábado, 15 de fevereiro de 2020 13:43
  • Olá,
    O que acontece é que são campos com tipos diferentes, pois estão em tabelas diferentes.

    Em tabela 1 o campo é do tipo smalldatetime.
    insert into tabela1 (campo1, campo2, campoData)
    select campo1, campo2, @dataValor from tabela2 

    Em tabela 2 o campo é do tipo nvarchar.
    update tabela2 
    set campoData = @dataValor 
    where id = x


    Resolvi o problema mudando o tipo da variável @dataValor na Sp para varchar (100).
    Com isto tanto o select quanto o insert possuem o mesmo valor para a coluna.

    Valeuuuus

    [Gosto de compartilhar problemas com soluções que encontro no dia de trabalho]

    • Marcado como Resposta TI DEV segunda-feira, 17 de fevereiro de 2020 12:16
    segunda-feira, 17 de fevereiro de 2020 12:15
  • Olá,
    O que acontece é que são campos com tipos diferentes, pois estão em tabelas diferentes.

    Em tabela 1 o campo é do tipo smalldatetime.
    insert into tabela1 (campo1, campo2, campoData)
    select campo1, campo2, @dataValor from tabela2 

    Em tabela 2 o campo é do tipo nvarchar.
    update tabela2 
    set campoData = @dataValor 
    where id = x


    Resolvi o problema mudando o tipo da variável @dataValor na Sp para varchar (100).
    Com isto tanto o select quanto o insert possuem o mesmo valor para a coluna.

    Valeuuuus

    [Gosto de compartilhar problemas com soluções que encontro no dia de trabalho]

    Toriyama,

    Ok, certo.

    Fica somente uma observação: Analise se é necessário utilizar um Varchar(100), sem querer você pode acabar alocando uma área além do necessário, que poderá representar uma possível brecha para passando de dados não requeridos, ainda mais por estar trabalhando com uma Stored Procedure e utilizando variáveis, isso pode ser tornar uma vulnerabilidade para ocorrências de SQL Injection.

    Recomendo sempre que possível utilizar na execução das suas Stored Procedures o comando SP_ExecuteSQL, como forma de garantir a execução mais segura e protegida pelas camadas internas de segurança do SQL Server.

    Se quiser saber mais sobre alguns riscos e possíveis soluções, acesse este post do meu amigo Dirceu Resende: https://www.dirceuresende.com/blog/sql-server-como-evitar-sql-injection-pare-de-utilizar-query-dinamica-como-execquery-agora/


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 17 de fevereiro de 2020 14:37
  • Entendi.

    Valeu!


    [Gosto de compartilhar problemas com soluções que encontro no dia de trabalho]

    segunda-feira, 17 de fevereiro de 2020 17:19
  • Deleted
    segunda-feira, 17 de fevereiro de 2020 23:17