none
Procedure com Select e Insert RRS feed

  • Pergunta

  • Prezados,
    Boa tarde!

    Estou precisando criar uma Stored que faça um select em uma tabela e ao mesmo tempo faça um insert em outra contendo todos os campos do select anterior. Vejam como estou tentando fazer:.

    CREATE PROCEDURE INSERRIR_CONSULTA AS

    DECLARE @eqp VARCHAR(255)
    DECLARE @res VARCHAR(8000)

    BEGIN
    SET @res=(SELECT DISTINCT DEVICE_ID FROM RAWJAPRINTJOB WHERE MONTH=01 AND YEAR=2011)

    INSERT INTO equipamento (device) values (@res)

    END

    MENSAGEM RETORNADA
    Mensagem 512, Nivel 16, Estado 1, Linha 3

    Subquery returned more than 1 value. This is not permitted when the subquery fallows =, !=, <,<=,>,>= or when is used as an experession.

    So preciso pegar todos os resultados do SQL e Inserir em outra tabela.

    quinta-feira, 10 de fevereiro de 2011 14:35

Respostas

  • O problema é que 

    SELECT DISTINCT DEVICE_ID FROM RAWJAPRINTJOB WHERE MONTH=01 AND YEAR=2011

    Deve estar retornando mais de um registro e @res nao é um amatriz (ou uma tabela) para aceitar varios registros.

    Eu creio que a melhor forma é

    CREATE PROCEDURE INSERRIR_CONSULTA AS

    BEGIN

    INSERT INTO equipamento (device) SELECT DISTINCT DEVICE_ID FROM RAWJAPRINTJOB WHERE MONTH=01 AND YEAR=2011

    END

     

    isso vai inserir na tabela equipamento todos os registros de RAWJAPRINTJOB  onde MONTH=01 e YEAR=2011.

     

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quinta-feira, 10 de fevereiro de 2011 14:51
  • No caso de update fica um pouco mais complicado... porque eu nao vejo na sua estrutura um elo de ligaçao entre equipamento e rawjaprintjob (exceto que device=deveice_id), mas nesse caso eu nao vejo o que voce gostaria de atualizar.

    Mas seria algo do tipo (atençao a query abaixo nao vai funcionar...  só um exemplo)

    UPDATE equipamento  SET device=device_id FROM equipamento  INNER JOIN rawjaprintjob  on equipamento.key=rawjaprintjob .key where rawjaprintjob.MONTH=01 AND rawjaprintjob.YEAR=2011

     

    Nos envie mais informaçoes sobre o que deseja fazer, porque nao esta claro o uso de um UPDATE.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quinta-feira, 10 de fevereiro de 2011 15:48

Todas as Respostas

  • O problema é que 

    SELECT DISTINCT DEVICE_ID FROM RAWJAPRINTJOB WHERE MONTH=01 AND YEAR=2011

    Deve estar retornando mais de um registro e @res nao é um amatriz (ou uma tabela) para aceitar varios registros.

    Eu creio que a melhor forma é

    CREATE PROCEDURE INSERRIR_CONSULTA AS

    BEGIN

    INSERT INTO equipamento (device) SELECT DISTINCT DEVICE_ID FROM RAWJAPRINTJOB WHERE MONTH=01 AND YEAR=2011

    END

     

    isso vai inserir na tabela equipamento todos os registros de RAWJAPRINTJOB  onde MONTH=01 e YEAR=2011.

     

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quinta-feira, 10 de fevereiro de 2011 14:51
  • Willian mto obrigado! Deu certinho!!!!

    No caso se fosse um update e tivesse uma condiçao para inserir esses eventos, posso utilizar o WHERE e na sequencia coloco o SELECT?

    quinta-feira, 10 de fevereiro de 2011 15:09
  • No caso de update fica um pouco mais complicado... porque eu nao vejo na sua estrutura um elo de ligaçao entre equipamento e rawjaprintjob (exceto que device=deveice_id), mas nesse caso eu nao vejo o que voce gostaria de atualizar.

    Mas seria algo do tipo (atençao a query abaixo nao vai funcionar...  só um exemplo)

    UPDATE equipamento  SET device=device_id FROM equipamento  INNER JOIN rawjaprintjob  on equipamento.key=rawjaprintjob .key where rawjaprintjob.MONTH=01 AND rawjaprintjob.YEAR=2011

     

    Nos envie mais informaçoes sobre o que deseja fazer, porque nao esta claro o uso de um UPDATE.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    quinta-feira, 10 de fevereiro de 2011 15:48
  • Willian é isso mesmo que eu precisava, mto obrigado!
    sexta-feira, 11 de fevereiro de 2011 14:16