Inserindo linhas usando as subconsultas INSERT e SELECT

A subconsulta SELECT da instrução INSERT pode ser usada para adicionar valores a uma tabela, que sejam originários de uma ou mais tabelas ou exibições diferentes. O uso de uma subconsulta SELECT também permite a entrada simultânea de mais de uma linha.

No exemplo a seguir, a instrução INSERT insere em uma tabela separada dados de todas as linhas da tabela Sales.SalesReason em AdventureWorks2008R2, cujo SalesReason é Marketing.

USE AdventureWorks2008R2;
GO
CREATE TABLE MySalesReason (
    SalesReasonID int NOT NULL,
    Name nvarchar(50),
    ModifiedDate datetime);
GO
INSERT INTO MySalesReason
    SELECT SalesReasonID, Name, ModifiedDate
    FROM AdventureWorks2008R2.Sales.SalesReason
    WHERE ReasonType = N'Marketing';
GO
SELECT SalesReasonID, Name, ModifiedDate 
FROM MySalesReason;
GO

A lista de seleção da subconsulta deve corresponder à lista de colunas da instrução INSERT. Se nenhuma lista de colunas for especificada, a lista de seleção deve corresponder às colunas da tabela ou à exibição inserida.

Outro uso da instrução INSERT... SELECT é a inserção de dados de uma fonte externa ao SQL Server. SELECT, na instrução INSERT pode ser usada para o seguinte: