O comando INSERT possui uma sintaxe alternativa que auxilia a execução desta tarefa. Veja abaixo:
INSERT INTO tabelaDestino
SELECT campo1, campo2, ... , campoN
FROM tabelaOrigem
WHERE condicionais
FROM tabelaOrigem
WHERE condicionais
Utilizando a tabela Funcionarios do artigo anterior, criaremos
CREATE TABLE Funcionarios
(
idFuncionario INT IDENTITY (1,1) PRIMARY KEY
, nome VARCHAR(100) NOT NULL
, dataAdmissao DATETIME NOT NULL
, dataDemissao DATETIME NULL
)
-- Inserindo dados fictícios para testes
INSERT INTO Funcionarios VALUES
('Evandro', '2001-07-03', NULL)
,('José','2002-02-09',NULL)
,('Ronaldo','1995-09-25','2001-05-03')
,('Márcia','2003-03-22','2004-06-04')
,('Régis','1997-09-25','2004-08-07')
,('Renata','2008-02-27',NULL)
,('Mariana','2009-01-15',NULL)
(
idFuncionario INT IDENTITY (1,1) PRIMARY KEY
, nome VARCHAR(100) NOT NULL
, dataAdmissao DATETIME NOT NULL
, dataDemissao DATETIME NULL
)
-- Inserindo dados fictícios para testes
INSERT INTO Funcionarios VALUES
('Evandro', '2001-07-03', NULL)
,('José','2002-02-09',NULL)
,('Ronaldo','1995-09-25','2001-05-03')
,('Márcia','2003-03-22','2004-06-04')
,('Régis','1997-09-25','2004-08-07')
,('Renata','2008-02-27',NULL)
,('Mariana','2009-01-15',NULL)
Em seguida, criaremos a tabela para armazenar os funcionários demitidos (FuncionariosDemitidos), com a mesma estrutura da tabela Funcionarios
-- Criando a tabela de Funcionários demitidos com a mesma estrutura original
CREATE TABLE FuncionariosDemitidos
(
idFuncionario INT
, nome VARCHAR(100) NOT NULL
, dataAdmissao DATETIME NOT NULL
, dataDemissao DATETIME NULL
)
CREATE TABLE FuncionariosDemitidos
(
idFuncionario INT
, nome VARCHAR(100) NOT NULL
, dataAdmissao DATETIME NOT NULL
, dataDemissao DATETIME NULL
)
Para preencher a nova tabela, basta utilizar o comando INSERT com a sintaxe indicada:
-- Inserindo os dados dos funcionários demitidos
INSERT INTO FuncionariosDemitidos
SELECT *
FROM Funcionarios
WHERE
dataDemissao is not null
INSERT INTO FuncionariosDemitidos
SELECT *
FROM Funcionarios
WHERE
dataDemissao is not null
Algumas consideraçõe sobre este procedimento:
- Ao contrário do comando SELECT com a cláusula INTO, o comando INSERT não cria a tabela tabelaDestino. Ou seja, a tabela tabelaDestino precisa obrigatoriamente existir.
- Evite utilizar o caracter curinga * para definir os campos a serem inseridos na tabelatabelaOrigem, principalmente quando esta possuir campos com auto-numeração (IDENTITY)
Para maiores informações sobre o comando INSERT, consulte no MSDN:
INSERT (T-SQL)
http://www.sqlserverdicas.com/2011/01/inserindo-o-resultado-de-uma-consulta_25.html
Nenhum comentário:
Postar um comentário