none
SQL Server RRS feed

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
    segunda-feira, 12 de dezembro de 2011 11:47
    Moderador

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]
    domingo, 11 de dezembro de 2011 00:16
  • 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.

    domingo, 11 de dezembro de 2011 01:35
  • 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
    segunda-feira, 12 de dezembro de 2011 11:47
    Moderador
  • Fabrizzio valeu a  dica, vou testar aqui e lhe conto o resultado.

    valeu...

    terça-feira, 13 de dezembro de 2011 01:52
  • Fabrizzio,

    Obrigado pela dica cara, deu certinho o resultado que eu precisava.

    Agradeço a dica.

    Valeu...

    sábado, 24 de dezembro de 2011 18:22