none
INSERT de muitas linhas RRS feed

  • Pergunta

  • Olá pessoal,

    Tenho uma tabela com o código, descrição e status de uma máquina

    Tenho outra tabela que tem as Paradas de uma máquina.

    Por exemplo:

    • tb_Maquinas

    | cod_maq | desc_maq | status |

    • tb_Parada_Maquina

    | cod_maq | cod_parada | desc_parada | status |

    Dúvida:

    Como eu faria para inserir uns 5 códigos de parada(cod_parada) para todas as máquinas(cod_maq) que estão com o status ativo(status = 'A') de uma só vez ?

    Só sei fazer isso uma por uma, tipo:

    INSERT INTO tb_Parada_Maquina VALUES ('Maqn1','Pard1','Parada numero 1','A')
    
    INSERT INTO tb_Parada_Maquina VALUES ('Maqn1','Pard2','Parada numero 2','A')
    
    INSERT INTO tb_Parada_Maquina VALUES ('Maqn2','Pard1','Parada numero 1','A')
    
    INSERT INTO tb_Parada_Maquina VALUES ('Maqn2','Pard2','Parada numero 2','A')
    E assim vai...

    Desde já agradeço.

    abç

    terça-feira, 23 de abril de 2013 16:35

Respostas

  • Danilo,

    Com um INSERT... SELECT.

    INSERT INTO tb_Parada_Maquina
    SELECT cod_maq, 'Codigo da Parada', 'Descricao da Parada', 'A'
    FROM tb_Maquinas
    WHERE status = 'A'
    

    Desta forma, você vai inserir uma parada para todas a máquinas com o status = 'A'

    Agora, para inserir várias, você pode fazer isso com um UNION... ou uma melhor forma, ter uma tabela para os tipos de paradas... aí basta fazer um join especificando os tipos de parada desejados.

    Espero que te ajude.

    []'s

    terça-feira, 23 de abril de 2013 16:44

Todas as Respostas

  • Danilo,

    Se for SQL 2008 ou superior voce pode fazer assim:

    INSERT INTO tb_Parada_Maquina VALUES ('Maqn1','Pard1','Parada numero 1','A')
    ,('Maqn1','Pard2','Parada numero 2','A')
    ,('Maqn2','Pard1','Parada numero 1','A')
    ,('Maqn2','Pard2','Parada numero 2','A')

    Caso seja 2005 ou inferior, apenas da forma que voce mesmo postou.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com

    terça-feira, 23 de abril de 2013 16:36
    Moderador
  • Danilo,

    Com um INSERT... SELECT.

    INSERT INTO tb_Parada_Maquina
    SELECT cod_maq, 'Codigo da Parada', 'Descricao da Parada', 'A'
    FROM tb_Maquinas
    WHERE status = 'A'
    

    Desta forma, você vai inserir uma parada para todas a máquinas com o status = 'A'

    Agora, para inserir várias, você pode fazer isso com um UNION... ou uma melhor forma, ter uma tabela para os tipos de paradas... aí basta fazer um join especificando os tipos de parada desejados.

    Espero que te ajude.

    []'s

    terça-feira, 23 de abril de 2013 16:44
  • Legal! Obrigado, mas não é exatamente isso que estou tentando aprender.

    Vamos dizer que eu tenha cerca de 500 Máquinas.

    Eu teria que escrever o VALUES (...) para todas as 500 maquinas?

    Queria saber se tem algum jeito de inserir parada(s) em várias máquinas ao mesmo tempo sem ter que digitar mais de 500 vezes. rss

    Tipo:

    Quero inserir a parada " | '0001' | 'Parada por falta de energia' | 'A' | "  em todas as máquinas existentes.

    Não sei se ficou claro, ou se estou falando besteira, mas acho que é isso.

    De qualquer maneiro, obrigado novamente.

    terça-feira, 23 de abril de 2013 17:01
  • Então daniloalex,

    Chegou a ver a sugestão que eu dei? Acho que ela resolveria esse seu problema... não?

    []'s!

    terça-feira, 23 de abril de 2013 17:09
  • Obrigado Logan, era isso mesmo, deu certinho ;)

    Testei para uma parada e ficou show, vou tentar o UNION agora.

    Sobre a tabela, acho que seria interessante também, obrigado pela dica.

    Um abraço!

    terça-feira, 23 de abril de 2013 17:31
  • Sem problemas Danilo!

    Só peço para marcar a resposta que te ajudou como resposta... :-)

    []'s!

    terça-feira, 23 de abril de 2013 17:49