Ir para conteúdo

POWERED BY:

Arquivado

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

gsq_queiroz

Novo em SQL. INSERT obtendo valor de outra tabela.

Recommended Posts

E ai pessoal, beleza? Estou começando a trabalhar com banco de dados, estou utilizando o SQL SERVER 2008 e a cada dia estou aprendendo mais, mas agora estou um problema.


Estou tentando fazer uma QUERY de INSERT em uma tabela, mas obtendo apenas um valor de uma outra tabela. Eu aprendi a fazer um INSERT pegando todos os registros da tabela de origem, mas quando tento pegar apenas o valor de um campo, não consigo. Tem como eu fazer isso usando apenas o INSERT e o SELECT?


Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, obrigado Motta por responder. Então vi isso também, mas como faço para inserir os outros valores? entende?

INSERT INTO 
   CLIENTE_PRODUTO (CLPR_CACL_CD_CLIENTE , CLPR_PRPR_CD_TIPO    , CLPR_PRPR_DT_ATUALIZACAO,
                    CLPR_QT_PRODUTO      , CLPR_PRPR_VL_PRODUTO ,            CLPR_VL_TOTAL )
 VALUES  ( 1, 1,'2015-04-01', 5)
SELECT PRPR_VL_PRODUTO FROM PRECO_PRODUTO
   WHERE PRPR_DT_ATUALIZACAO = '2015-04-10' 

Tentei fazer desse jeito ai, mas está dando erro :upset:

 

Tipo, aqui eu quero inserir os valores e pegar apenas o PRPR_VL_PRODUTO da tabela PRECO_PRODUTO e inserir no campo CLPR_PRPR_VL_PRODUTO da tabela CLIENTE_PRODUTO, para que ai eu possa calcular o CLPR_VL_TOTAL.

Estou estou pesquisando aqui para ver se acho a solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estudando as procedures e fazendo outras pesquisas, percebi que não preciso fazer uma procedure. Vejam como ficou o código.

INSERT INTO
     CLIENTE_PRODUTO ( CD_CLIENTE, CD_TIPO, ATUALIZACAO, QT_PRODUTO, VL_PRODUTO, VL_TOTAL)
     VALUES ( 1, 1,'2015-04-01', 5,
            (SELECT VL_PRODUTO FROM PRECO_PRODUTO WHERE  CD_TIPO = 1 AND ATUALIZACAO = '2015-04-01'),250.25)

Dessa forma eu consegui inserir os dados no banco, mas agora o problema é como fazer a query para calcular o valor total. No caso no lugar desse valor fixo 250.25, teria que entrar uma formula ou query para multiplicar os campos QT_PRODUTO e VL_PRODUTO, tentei colocar mais um SELECT mas apresenta erro de sintax.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só acho que esta mto confuso isso... um subselect no meio do insert pode lhe dar varios problemas, como por exemplo o retorno de dois valores nessa condição.

 

Vamos por partes para fazer de um modo correto:

 

A tabela "PRECO_PRODUTO", quais os campos possui nela? Somente o valor do produto? Qual a relação dela com a CLIENTE_PRODUTO?

Da para fazer um INSERT FROM.

 

De onde vem os dados depois do "VALUES"? Do sistema? Fixo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra questão a responder é se é demanda avulsa ou vai virar produção , no caso de segunda a coisa tem de ser melhor pensada para evitar problemas futuros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver essa questão.

DECLARE
 @CDCLIENTE       SMALLINT,
 @CDTPO           SMALLINT,
 @DTATUALIZACAO   DATETIME,
 @QTPRODUTO       SMALLINT,

-- declarei as variáveis e fiz os seus SET, passando os valores 

SET @CDCLIENTE      = 2
SET @CDTPO          = 1    
SET @DTATUALIZACAO  = '2015-04-01'
SET @QTPRODUTO      = 2

INSERT INTO CLIENTE_PRODUTO
    (CLPR_CACL_CD_CLIENTE,CLPR_PRPR_TIPR_CD_TIPO,CLPR_PRPR_DT_ATUALIZACAO,CLPR_QT_PRODUTO,CLPR_PRPR_VL_PRODUTO, CLPR_VL_TOTAL)
SELECT @CDCLIENTE,@CDTPO,@DTATUALIZACAO,@QTPRODUTO,PRPR_VL_PRODUTO,PRPR_VL_PRODUTO * @QTPRODUTO
  FROM PRECO_PRODUTO
WHERE PRPR_TIPR_CD_TIPO = @CDTPO AND 
      PRPR_DT_ATUALIZACAO = @DTATUALIZACAO  

Fiz um SELECT passando as variáveis, e os campos que eu queria da tabela PRECO_PRODUTO, que já estava com registros.

Assim eu consegui fazer um INSERT, obtendo apenas um valor de uma outra tabela.

 

Obrigado pela ajuda.

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.