SQL Server SELECT INTO

17 Mar 2025 | 4 分钟阅读

本文将解释 SQL Server 中 SELECT INTO 语句的完整概述。 我们将使用此语句将数据添加到表中。 当我们使用此语句时,它将首先在默认文件组中创建一个新表,然后将 SELECT 语句选择的记录插入到该新表中。 需要注意的是,源表的约束不会复制到目标表。

语法

以下是说明 SELECT INTO 语句的语法

参数

下面给出了此语句的参数说明

  • columns_list: 它指示我们要从源表中检索并插入到新表中的列名。
  • new_table_name: 它表示必须唯一的​​新表名。 此语句使用 columns_list 中指定的列创建一个新表。
  • source_table_name: 它指示我们要从中获取记录的表的名称。 在这里,我们还可以使用适当的 JOIN 子句指定多个表。
  • WHERE 条件: 这是一个可选子句,用于从源表复制部分数据。

SELECT INTO 示例

让我们通过一些示例了解 SELECT INTO 语句在 SQL Server 中的工作方式。 假设我们有一个表 “employee”,其中包含以下数据

SQL Server SELECT INTO

1. 如果我们要将 employee 表的所有记录复制到 backup_employee 表中,我们需要使用 SELECT INTO 语句,如下所示

我们可以验证 employee 数据是否已成功插入到 backup_employee 表中,如下所示

这是输出

SQL Server SELECT INTO

2. 如果我们要将 employee 表的某些行复制到 backup_employee 表中,我们需要使用带有 WHERE 子句的 SELECT INTO 语句,如下所示

我们可以使用 SELECT 语句验证员工数据是否已成功插入到 backup_employee 表中。 这是输出

SQL Server SELECT INTO

3. 如果我们要将 employee 表的某些列复制到 backup_employee 表中,我们需要在 SELECT INTO 语句中指定所需的列名,如下所示

我们可以使用 SELECT 语句验证员工数据是否已成功插入到 backup_employee 表中。 这是输出

SQL Server SELECT INTO

SELECT INTO 从多个表插入数据

SQL Server 允许我们将 JOIN 子句与 SELECT INTO 语句一起使用。 它有助于我们从多个表中检索记录,然后将它们插入到新表中。 在这里,我们使用 INNER JOIN 通过 id 列 连接两个表。

考虑以下名为 customerorders 的表,其中包含以下数据

SQL Server SELECT INTO

假设我们要从 customer 和 orders 表name、email、item、price 和 purchase date 等列复制到 customer_order 表中。 我们可以通过在 SELECT INTO 语句中指定带有 JOIN 子句的列名来做到这一点,如下所示

我们可以使用 SELECT 语句验证客户和订单表数据是否已成功插入到 customer_order 表中。 这是输出

SQL Server SELECT INTO

SELECT INTO vs. INSERT INTO SELECT

这两个语句都可以用于将数据从一个表移动到另一个表。 由于它们提供相似的功能,因此这两个语句有一些差异,这些差异可能会影响我们决定选择哪一个。

以下几点解释了它们之间的区别

1. 只有当目标表已存在于数据库中,才能使用 INSERT INTO select 语句,才能将数据从源表复制到目标表。 另一方面,在从源表复制数据之前,SELECT INTO 语句不需要目标表存在于我们的数据库中。 它在每次执行时都会自动创建一个目标表。

请看以下语句

此语句会引发错误,因为 tempTable 在数据库中不存在。 这是输出

SQL Server SELECT INTO

2. 区分它们的另一个区别与目标表的结构有关。 由于 SELECT INTO 语句自动创建表结构,因此它将与源表具有相同的结构。 这可能会导致插入数据时出现问题。 以下示例说明了这一点。

示例

上面创建的 customer_order 表包含一个长度为 8 的价格列。SELECT INTO 语句将生成具有与源表完全相同的列定义的目标表。 当我们尝试在 price 列中插入大于其大小的数据时,我们将收到一个错误,或者二进制数据将被截断。