插入数据

 数据库   ZeroIsStart   2024-10-20 09:38   16

SQL Server 插入数据详解:使用 INSERT 插入单条或多条记录及 INSERT SELECT

在 SQL Server 中,插入数据是对数据库操作的核心之一。在日常开发和数据处理过程中,向数据库表中插入数据是一个常见且重要的操作。本文将详细讲解如何在 SQL Server 中使用 INSERT 语句插入单条或多条记录,同时介绍 INSERT SELECT 语法及其在插入数据中的应用场景。


1. INSERT 语句简介

INSERT 语句用于向数据库表中插入新的数据行。根据使用场景的不同,我们可以使用 INSERT INTO 语句插入单条或多条记录,或者将查询结果插入到目标表中。

INSERT INTO 语法的基本结构如下:

INSERT INTO 表名 (列1, 列2, ...)
VALUES (值1, 值2, ...);
  • 表名:要插入数据的目标表。
  • 列1, 列2, ...:表中的列名,可以选择插入部分列的数据。
  • VALUES:插入的实际值,与列名一一对应。

2. 插入单条记录

向数据库中插入单条记录是最常见的操作。通过 INSERT INTO 语句,我们可以在指定表的指定列中插入一行数据。

示例 1:插入单条记录

假设我们有一个名为 Employees 的表,表结构如下:

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    Salary DECIMAL(18, 2),
    HireDate DATETIME
);

我们可以使用 INSERT INTO 语句插入一名新员工的数据:

INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary, HireDate)
VALUES (101, 'John', 'Doe', 55000.00, '2024-01-15');

解释:

  • 我们向 Employees 表中插入了 5 个值,分别对应 EmployeeID, FirstName, LastName, Salary, 和 HireDate 列。

示例 2:插入部分列的数据

在实际应用中,并不总是需要向所有列插入数据。例如,如果某些列允许为空(NULL),或者具有默认值,我们可以只为特定的列插入数据:

INSERT INTO Employees (EmployeeID, FirstName, LastName)
VALUES (102, 'Jane', 'Smith');

解释:

  • 在此例中,我们只为 EmployeeID, FirstName, 和 LastName 插入了值,SalaryHireDate 列将使用其默认值或 NULL

示例 3:不指定列名的插入

如果我们希望插入所有列的数据,并且所有列的数据顺序与表中的列顺序一致,我们可以省略列名。此时 VALUES 中的值顺序必须与表的列顺序一致:

INSERT INTO Employees
VALUES (103, 'Michael', 'Jordan', 60000.00, '2024-05-01');

注意:

  • 不推荐省略列名的写法,因为表结构可能发生变化,导致插入的数据与列不匹配。

3. 插入多条记录

在 SQL Server 中,可以使用 INSERT INTO ... VALUES 的方式一次插入多条记录。在 VALUES 之后,可以添加多组值,每组值用逗号隔开。

示例 4:插入多条记录

我们可以在一次操作中插入多名员工的数据:

INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary, HireDate)
VALUES
    (104, 'Emily', 'Blunt', 52000.00, '2024-02-20'),
    (105, 'Chris', 'Evans', 58000.00, '2024-03-10'),
    (106, 'Scarlett', 'Johansson', 61000.00, '2024-04-15');

解释:

  • 此语句一次性向 Employees 表中插入了 3 条记录,每条记录分别包含 5 个值。

4. 使用 INSERT SELECT 插入查询结果

INSERT SELECT 语句允许我们将查询的结果插入到另一个表中。这在需要从一个表导入数据到另一个表时非常有用。

INSERT SELECT 的语法结构如下:

INSERT INTO 目标表名 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表
WHERE 条件;

示例 5:将查询结果插入到另一张表

假设我们有一个名为 NewEmployees 的表,我们可以将 Employees 表中的部分员工信息插入到 NewEmployees 表中:

CREATE TABLE NewEmployees (
    EmployeeID INT,
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    Salary DECIMAL(18, 2)
);

INSERT INTO NewEmployees (EmployeeID, FirstName, LastName, Salary)
SELECT EmployeeID, FirstName, LastName, Salary
FROM Employees
WHERE Salary > 55000;

解释:

  • 我们从 Employees 表中选取工资大于 55000 的员工,并将其插入到 NewEmployees 表中。
  • 这种方法非常适合在需要将一部分数据迁移到另一个表时使用。

示例 6:将所有数据从一个表复制到另一个表

我们还可以通过 INSERT SELECT 语句将一个表的所有数据复制到另一个表中:

INSERT INTO NewEmployees (EmployeeID, FirstName, LastName, Salary)
SELECT EmployeeID, FirstName, LastName, Salary
FROM Employees;

5. INSERT INTO 的注意事项

5.1 自增列(IDENTITY 列)

如果表中包含自增列(例如主键 ID 列),我们通常不需要为自增列指定值,SQL Server 会自动为其生成值。

假设 EmployeeID 是一个自增列,我们可以这样插入数据:

CREATE TABLE Employees (
    EmployeeID INT IDENTITY(1,1), -- 自增列
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    Salary DECIMAL(18, 2),
    HireDate DATETIME
);

INSERT INTO Employees (FirstName, LastName, Salary, HireDate)
VALUES ('Tom', 'Holland', 54000.00, '2024-06-01');

5.2 插入数据与数据类型

插入的数据必须与列的数据类型相匹配。例如,如果 Salary 列的数据类型是 DECIMAL(18, 2),则插入的数据必须为数值类型,且小数点后最多保留两位。

错误示例:

-- 错误:插入的字符串不符合 DECIMAL 类型
INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary, HireDate)
VALUES (107, 'Peter', 'Parker', 'FiftyThousand', '2024-06-15');

正确示例:

-- 正确:插入的数值符合 DECIMAL 类型
INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary, HireDate)
VALUES (107, 'Peter', 'Parker', 50000.00, '2024-06-15');

6. 使用 OUTPUT 返回插入的数据

有时我们在插入数据后希望知道哪些数据已成功插入。这时可以使用 OUTPUT 关键字,它可以在 INSERT 操作后返回插入的值。

示例 7:使用 OUTPUT 返回插入的值

INSERT INTO Employees (FirstName, LastName, Salary, HireDate)
OUTPUT inserted.EmployeeID, inserted.FirstName, inserted.LastName
VALUES ('Bruce', 'Wayne', 70000.00, '2024-07-01');

解释:

  • OUTPUT 关键字可以返回插入操作中被插入的值。这里我们返回了插入的 EmployeeID, FirstName, 和 LastName

7. 总结

本文详细介绍了 SQL Server 中 INSERT 语句的使用方法,包括插入单条和多条记录、使用 INSERT SELECT 插入查询结果,以及如何通过 OUTPUT 返回插入的数据。在日常开发中,正确使用 INSERT 语句能够有效提高数据的处理效率,同时确保数据的完整性和准确性。

通过 INSERT 语句的灵活运用,我们不仅可以轻松地向数据库中添加数据,还可以实现数据迁移和数据备份等复杂操作。掌握这些技术,将为你在数据库操作中带来更多的灵活性和便利。