在本教學中,將學習如何使用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
語句向表中添加新行。