Ir para conteúdo

POWERED BY:

Arquivado

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

FabianoSouza

Gravar decimal em stored procedure

Recommended Posts

No bd, tenho um campo definindo como decimal (3,1): três caracteres no campo,

sendo um para casa decimal para valores ficarem nesse padrão: X,X.

Até aqui ok, sem problema.

 

O problema é que ao rodar a SP de insert, o valor 4.5 é gravado como 45, por exemplo.

Fazendo testes notei que, se eu definir a variável @peso como char(3), a coisa funciona.

Mas se mantê-la como decimal (igual a definição do campo) ocorre o erro acima citado.

 

Para contornar o problema, estou deixando a variável @peso definida como CHAR(3).

Mas estou confuso porque se o campo está definido como decimal, a variável deve ter a mesma definição, certo?

 

Onde está o problema?

 

Obrigado, pessoal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, Fabiano! A princípio se vc tem um campo decimal(3,1) e inserir o conteudo 4.5 de uma variável também decimal(3,5), o valor inserido será realmente o 4.5, como pode conferir no exemplo a seguir. Envie, por favor, o código da sua procedure.

 

create table #temp (peso decimal(3,1))
go
declare @peso decimal(3,1)
set @peso = 4.5
insert into #temp values (@peso)
select * from #temp
go
drop table #temp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, Diemerson.

Obrigado pela ajuda.

 

Testei seu exemplo. Realmente funciona.

 

Mas em minha SP ainda ocorre o problema citado.

USE [meu_banco]
GO
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[meuInsert] 

@peso decimal (3,1),
@codUsuario int,
@ip char(32)

AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION

BEGIN

INSERT INTO minhaTab 

(Peso, codigoAutor, DataCad, IPCad) 

VALUES 

(@peso, @codUsuario, GETDATE(), @ip)

END
COMMIT TRANSACTION

Obrigado!

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.