使用 INSERT 和 SELECT 子查询插入行

INSERT 语句中的 SELECT 子查询可用于将一个或多个表或视图中的值添加到另一个表中。使用 SELECT 子查询还可以同时插入多行。

在以下示例中,INSERT 语句将 AdventureWorks2008R2 的 Sales.SalesReason 表中 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

子查询的选择列表必须与 INSERT 语句的列列表匹配。如果没有指定列列表,选择列表必须与正在其中执行插入操作的表或视图的列匹配。

INSERT...SELECT 语句的另一个作用是从 SQL Server 外部的源插入数据。INSERT 语句中的 SELECT 可用于下列情况: