Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FabianoSouza

Campo datetime truncado em insert via procedure

Recommended Posts

O valor a ser gravado chega assim 10/10/2015

Preciso que grave no padrão dd/mm/yyyy.

Mas o campo (definido como datetime) está gravando o valor assim: out 10 201.

 

O procedimento que grava é este (isso é apenas um trecho do código)

BEGIN
@dataAdmissao datetime

INSERT INTO tab
(DataAdmissao)
VALUE
(@dataAdmissao)
END

O que há de errado?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá A.Jr.

Estou tentando... mas não funcionou. Veja a SP

ALTER PROCEDURE [dbo].[minhaSP] 
@dataAdmissao datetime,
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION


SET DATEFORMAT dmy; -- AQUI ESTÁ SUA SUGESTÃO --

DECLARE @id Int
SELECT @id = fCod FROM tab
INNER JOIN tabU ON tab.Autor = tabU.Cod 
WHERE 
tab.fConta 
IN (SELECT tab.fConta FROM U AS tabU 
WHERE Cod = @Autor AND tabU.Conta = fConta
)
AND
funNome= @nome collate Latin1_General_CI_AI

IF @id IS NULL
BEGIN




INSERT INTO tab
(DataAdmissao) 
VALUES 
(@dataAdmissao)




SELECT @id = SCOPE_IDENTITY()
END
ELSE
SET @id = 0

SELECT @id AS ID
COMMIT TRANSACTION

Compartilhar este post


Link para o post
Compartilhar em outros sites

O formato datetime internamente é um inteiro , o número de segundos decorridos de uma determinade data , o formato de exibição é que são outros 500.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dataAdmissao , não recebe nenhum valor aparentemente.

 

não deveria ter algo como

@dataAdmissao := GETDATE()

?




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, acho que dei bobeira e não coloquei o trecho que recebe a data.

Mas isso está ok na SP, chega uma data no padrão dd/mm/aaaa.

 

Mas por alguma razão o resultado fica neste padrão "Out 15 199", tendo passado a data 15/10/1990 para a variável

@dataAdmissao. Este é o problema. Não sei porque ocorre esse erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O formato Date não é gravado em um formato específico é gravado como um inteiro , detalhes , a questão é a forma de exibição/formatação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué? Então tenho que definir o campo como int? Não entendi.

 

Quando gravo data via SQL na aplicação, basta passar a data (exemplo) 10/05/2015 que será gravada exatamente assim (campo definido como datetime).

 

Mas agora estou usando procedimento armazenado para inserir os dados e está gerando esse erro.

Pelo que estou etendendo, bastaria usar SET DATEFORMT DMY. Mas não estou sabendo como usar isso. Acho que é esse o ponto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

NÃO , o que tentei dizer é que não se grava a data em formato nenhum , apenas quando se extraí e que é exibido em algum formato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmm entendi.

Mas meu caso é que a data está truncando.

Fica assim no banco "out 10 201" Isso não é data!

 

 

Bom, consegui uma solução.

CONVERT(VARCHAR(10),CONVERT(DATE, @dataAdmissao,106),103)

Gravar exatamente assim dd/mm/aaaa

 

Essa é a melhor maneira??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade o campo datetime é definido pelo SO e collation da base.

Depende tambem de como o parametro esta sendo passado para a procedure.

Ja tive casos que o campo era datetime, eu mandava uma data e ele simplesmente invertia mes e dia e fui descobrir que o collation da minha base que tinha esta inversao ¬¬

 

Pode nao ser a melhor maneira, mas do jeito que colocou é funcional.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, A.Jr. Tembgém cheguei a enfrentar o mesmo problema que você relatou, a inversão de mês e dia.

Achei que isso fosse por questão das configurações de idioma usado na instalação do SQL ou do Windows no server.

 

MInhas datas são sempre passadas como DD/MM/YYYY.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.