INSERT within a SELECT - SQL Server

1

I need to do an INSERT within a SELECT in some cases in my Query.

An example of how I need to:

SELECT IdTabela,
       Nome,
       CASE
         WHEN IdTabela > 10 
           THEN 
             INSERT INTO TabelaExemplo (IdTabelaExemplo) VALUES (IdTabela)
       END
FROM Tabela

I've looked for several modes on the internet, and an example I found is this:

INSERT INTO TabelaExemplo 
            (IdTabelaExemplo) 
VALUES      (SELECT IdTabela 
             FROM   Tabela 
             WHERE  IdTabela > 10) 

But this does not solve my problem.

Thank you!

At. Guilherme

    
asked by anonymous 19.07.2016 / 22:51

3 answers

2

Try this way without VALUES

INSERT INTO TabelaExemplo 
    (IdTabelaExemplo)
    SELECT IdTabela FROM Tabela
    WHERE IdTabela > 10 

Reference: link

    
19.07.2016 / 23:08
0

Create a procedure to do this, and the inside you will be able to do the validation via SELECT and with IF decide if it will be inserted or not.

CREATE PROCEDURE PROC_INSERE
AS
BEGIN
DECLARE @IDTABELA INT

SELECT @IDTABELA  = IdTabela FROM Tabela

if @IDTABELA > 10 
    begin
         INSERT INTO TabelaExemplo (IdTabelaExemplo) VALUES (IdTabela)
    end

END
    
22.07.2016 / 16:13
0

Another way to do this would be by using a Cursor:

/* 
  Procedimento que serve para:
  incluir registro em uma tabela com base em uma consulta e uma condição 
  Criado em: 08/08/2016
*/

USE Sample1

-- Não exibe alterações
SET NOCOUNT ON

DECLARE 
 @idTabela int,
 @Nome varchar(100) 

DECLARE Incluir_cursor CURSOR FOR
   select
     idTabela, Nome
   from
    Tabela1

-- Inicialização de variáveis
SET @idTabela = 0

OPEN Incluir_cursor

FETCH NEXT FROM Incluir_cursor INTO @idTabela, @Nome

WHILE @@FETCH_STATUS = 0
BEGIN
  IF @idTabela > 10
   INSERT INTO TabelaExemplo (IdTabelaExemplo) VALUES (@idTabela)

  -- Vai para o próximo registro
  FETCH NEXT FROM Incluir_cursor INTO @idTabela, @Nome
END

-- Fecha o cursor
CLOSE Incluir_cursor
DEALLOCATE Incluir_cursor

-- Exibe alterações
SET NOCOUNT OFF
    
08.08.2016 / 20:54