Usuário com melhor resposta
SQL Server

Pergunta
-
Respostas
-
Ricardo,
O problema não esta na sua coluna comptada, e sim em seus data types, veja:
Quando voce divide um numero inteiro por inteiro, seu retorno sera inteiro
Quando voce divide inteiro por decimal, seu retorno sera decimal
A unica maneira de voce obter um decimal, é com a divisão de um decimal por um inteiro ou de um decimal por um decimal
Como o seu campo Margem é inteiro, ao dividi-lo por 100, voce esta tendo um inteiro, se voce colocar um numero baixo, por exemplo, 5, como eu coloquei em meus testes, ao dividir 5/100, voce tera 0 como retorno, adicionando 1 da forma, voce tera 1*Custo, que é exatamente o custo que voce colocou.
Para solucionar este problema, faça assim:
Create Table CadProdutos
(
Custo decimal(5,2) not null
,Margem int not null
,Venda AS CAST (Custo*(1+(CAST(Margem as decimal(5,2))/100)) as decimal(5,2))
)
Insert de teste:
INSERT INTO CadProdutos(Custo, Margem) VALUES (50.50, 5)
Select de teste:
select * from CadProdutos
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Marcus Vinícius BittencourtMVP segunda-feira, 12 de dezembro de 2011 12:34
- Marcado como Resposta Fabrizzio CaputoModerator segunda-feira, 26 de dezembro de 2011 10:50
Todas as Respostas
-
Ricardo,
Poderia ser um pouco mais claro na sua necessidade?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com] -
Olá Júnior,
seguinte, eu tenho o seguinte código SQL Serve:
Create Table CadProdutos
(
Codigo int not null primary key identity(1,1)
,Descricao varchar(35) not null
,Departamento varchar(6) not null
,Custo decimal(5,2) not null
,Margem int not null
,Venda AS CAST (Custo*(1+(Margem/100)) as decimal(5,2))
)Criei um formulário de cadastro em C#, porém o campo Venda não está fazendo o cálculo correto, ele traz o mesmo valor informado no CUSTO.
Poderiam me dizer onde estou errando?
Obrigado.
-
Ricardo,
O problema não esta na sua coluna comptada, e sim em seus data types, veja:
Quando voce divide um numero inteiro por inteiro, seu retorno sera inteiro
Quando voce divide inteiro por decimal, seu retorno sera decimal
A unica maneira de voce obter um decimal, é com a divisão de um decimal por um inteiro ou de um decimal por um decimal
Como o seu campo Margem é inteiro, ao dividi-lo por 100, voce esta tendo um inteiro, se voce colocar um numero baixo, por exemplo, 5, como eu coloquei em meus testes, ao dividir 5/100, voce tera 0 como retorno, adicionando 1 da forma, voce tera 1*Custo, que é exatamente o custo que voce colocou.
Para solucionar este problema, faça assim:
Create Table CadProdutos
(
Custo decimal(5,2) not null
,Margem int not null
,Venda AS CAST (Custo*(1+(CAST(Margem as decimal(5,2))/100)) as decimal(5,2))
)
Insert de teste:
INSERT INTO CadProdutos(Custo, Margem) VALUES (50.50, 5)
Select de teste:
select * from CadProdutos
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Marcus Vinícius BittencourtMVP segunda-feira, 12 de dezembro de 2011 12:34
- Marcado como Resposta Fabrizzio CaputoModerator segunda-feira, 26 de dezembro de 2011 10:50
-
-