SQL Server Insert語句

在本教學中,將學習如何使用INSERT語句向表中添加新行。

SQL Server INSERT語句簡介

要在表中添加一行或多行,請使用INSERT語句。 以下是INSERT語句的最基本形式:

INSERT INTO table_name (column_list)
VALUES (value_list);

下麵更詳細地解釋這種語法。

首先,table_name指定要插入的表的名稱。 通常,通過模式名稱引用表名稱,例如production.products,其中production是模式名稱,products是表名稱。

其次,column_list指定要在其中插入數據的一個或多個列的列表。必須將列列表括在括弧中並用逗號分隔列。

如果列在列列表中沒有出現,則SQL Server必須能夠提供插入值,否則無法插入行。

SQL Server自動對表中可用的列使用以下值,但不會出現在INSERT語句的列列表中:

  • 如果列具有IDENTITY屬性,則為下一個增量值。
  • 如果列具有指定的默認值,則為默認值。
  • 如果列的數據類型是時間戳數據類型,則為當前時間戳值。
  • 如果列可以為NULL值,則使用NULL
  • 如果列是計算列,則使用計算的值。

第三,要在VALUES子句中提供插入的值列表。 列列表中的每列必須在值列表中具有相應的值。 此外,必須將值列表括在括弧中。

SQL Server INSERT語句示例

為了方便演示,創建一個名為promotions的新表:

CREATE TABLE sales.promotions (
    promotion_id INT PRIMARY KEY IDENTITY (1, 1),
    promotion_name VARCHAR (255) NOT NULL,
    discount NUMERIC (3, 2) DEFAULT 0,
    start_date DATE NOT NULL,
    expired_date DATE NOT NULL
);

在本聲明中,在sales模式中創建了一個名為promotions的新表。 promotions表有五列,包括:促銷標識號(promotion_id),名稱(name),折扣(discount),開始日期(start_date)和過期日期(expired_date)。

promotion_id是標識列,因此當向表中添加新行時,SQL Server會自動填充其值。

1. 基本INSERT示例

以下語句將新行插入promotions表:

INSERT INTO sales.promotions (
    promotion_name,
    discount,
    start_date,
    expired_date
)
VALUES
    (
        '2020夏季促銷',
        0.25,
        '20200601',
        '20200901'
    );

在此示例中,為promotions表中的四列指定了值。但沒有為promotion_id列指定值,因為SQL Server會自動為此列提供值。

如果INSERT語句成功執行,將返回插入的行數。 在這種情況下,SQL Server發出以下消息:

(1 row affected)

要驗證插入操作結果,請使用以下查詢表中的數據:

SELECT
    *
FROM
    sales.promotions;

執行上面查詢語句,得到以下結果:

2. 插入並返回插入的值

要捕獲插入的值,請使用OUTPUT子句。 例如,以下語句將新行插入promotions表並返回promote_id列的插入值:

INSERT INTO sales.promotions (
    promotion_name,
    discount,
    start_date,
    expired_date
) OUTPUT inserted.promotion_id
VALUES
    (
        '2020秋季促銷',
        0.15,
        '20201001',
        '20201101'
    );

要從多個列中捕獲插入的值,請在輸出中指定列,如以下語句所示:

INSERT INTO sales.promotions (
    promotion_name,
    discount,
    start_date,
    expired_date
) OUTPUT inserted.promotion_id,
 inserted.promotion_name,
 inserted.discount,
 inserted.start_date,
 inserted.expired_date
VALUES
    (
        '2020冬季促銷',
        0.2,
        '20201201',
        '20200101'
    );

執行上面查詢語句,得到以下輸出結果:

3. 將顯式值插入標識列

通常,不為標識列指定值,因為SQL Server將自動提供值。但是,在某些情況下,可能希望在標識列中插入值,例如數據遷移。

請參閱以下INSERT語句:

INSERT INTO sales.promotions (
    promotion_id,
    promotion_name,
    discount,
    start_date,
    expired_date
) OUTPUT inserted.promotion_id
VALUES
    (
        2,
        '2020春季促銷',
        0.25,
        '20200201',
        '20200301'
    );

SQL Server發出以下錯誤:

要為標識列插入顯式值,必須首先執行以下語句:

SET IDENTITY_INSERT table_name ON;

要關閉標識插入,請使用類似的語句:

SET IDENTITY_INSERT table_name OFF;

執行以下語句,在promotion表中插入標識列的值:

SET IDENTITY_INSERT sales.promotions ON;

INSERT INTO sales.promotions (
    promotion_id,
    promotion_name,
    discount,
    start_date,
    expired_date
) OUTPUT inserted.promotion_id
VALUES
    (
        2,
        '2020春季促銷',
        0.25,
        '20200201',
        '20200301'
    );

SET IDENTITY_INSERT sales.promotions OFF;

在此示例中,首先,打開標識插入,然後插入一個具有標識列的顯式值的行,最後關閉標識插入。

以下查詢顯示插入後promotions表中的數據:

SELECT
    *
FROM
    sales.promotions;

在本教學中,學習了如何使用SQL Server INSERT語句向表中添加新行。


上一篇: SQL Server修改數據 下一篇: SQL Server數據查詢