Insertar filas mediante subconsultas INSERT y SELECT

La subconsulta SELECT de la instrucción INSERT se puede utilizar para agregar valores a una tabla de una o más tablas o vistas. Además, utilizar una subconsulta SELECT permite insertar más de una fila al mismo tiempo.

En el siguiente ejemplo, la instrucción INSERT inserta en una tabla independiente algunos de los datos de todas las filas de la tabla Sales.SalesReason en AdventureWorks2008R2 cuyo SalesReason es 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

La lista de selección de la subconsulta debe coincidir con la lista de columnas de la instrucción INSERT. Si no se especifica ninguna lista de columnas, la lista de selección debe coincidir con las columnas de la tabla o vista en la que se inserta.

Otro de los usos de la instrucción INSERT…SELECT es insertar datos de un origen externo a SQL Server. SELECT en la instrucción INSERT se puede utilizar para lo siguiente: