Thứ Hai, 24 tháng 7, 2023

Lệnh INSERT trong SQL Server

Ở bài trước bạn đã biết cách sử dụng lệnh SELECT rồi, vậy trong trong bài này mình sẽ nói đến lệnh INSERT, đây là lệnh dùng để thêm một dòng dữ liệu vào bảng.

Mục lục

  • 1. INSERT trong SQL Server
  • 2. Các ví dụ với lệnh INSERT
    • INSERT không trả về giá trị
    • INSERT lấy thông tin trả về
    • Gán dữ liệu cho khóa chính tăng tự động

1. INSERT trong SQL Server

Trước tiên bạn hãy xem cú pháp của lệnh này như sau:

1
2
INSERT INTO table_name (column_list)
VALUES (value_list);

Trong đó:

  • table_name là tên của table muốn thêm dữ liệu
  • column_list là danh sách các column
  • value_list là danh sách các giá trị tương ứng với column

Các cặp giá trị của column và value tương ứng với nhau. Ví dụ value đứng thứ 3 sẽ thuộc về column đứng thứ 3.

Ví dụ: Thêm một sinh viên mới.

1
2
INSERT INTO SINHVIEN (ID, NAME, AGE)
VALUES (1, "Nguyen Van Cuong", 29);

Giá trị của các column tương ứng như sau:

  • ID => 1
  • NAME  => Nguyen Van Cuong
  • AGE => 29

2. Các ví dụ với lệnh INSERT

Sau đây là các ví dụ minh họa cho các trường hợp thường gặp khi thêm dữ liệu vào table với lệnh INSERT.

Trước tiên bạn hãy tạo một bảng như sau:

1
2
3
4
5
6
7
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
);

Hãy để ý đến các ràng buộc nhé, nó rất quan trọng trong việc xử lý dữ liệu trước khi chạy lệnh SQL.

INSERT không trả về giá trị

Trường hợp này thì chạy bình thường.

1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO sales.promotions (
    promotion_name,
    discount,
    start_date,
    expired_date
)
VALUES
    (
        '2018 Summer Promotion',
        0.15,
        '20180601',
        '20180901'
    );

Các bạn thấy mình không truyền dữ liệu cho khóa chính promotion_id, lý do là cột này được thiết lập tăng tự động nên giá trị sẽ tự tăng lên 1 cho mỗi record.

Chạy câu SQL này bạn sẽ nhận được kết thành công quả như sau:

1
(1 row affected)

Để xem dữ liệu đã được thêm chưa thì ta chạy lệnh.

1
2
3
4
SELECT
    *
FROM
    sales.promotions;

Kết quả:

SQL Server INSERT example png

INSERT lấy thông tin trả về

Tất cả dữ liệu vừa được insert sẽ được lưu trong biến inserted, và để lấy dữ liệu của inserted thì ta dùng lệnh OUTPUT.

Ví dụ dưới đây lấy ID vừa insert.

1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO sales.promotions (
    promotion_name,
    discount,
    start_date,
    expired_date
) OUTPUT inserted.promotion_id
VALUES
    (
        '2018 Fall Promotion',
        0.15,
        '20181001',
        '20181101'
    );

Nếu muốn lấy nhiều column hơn thì hãy tách chúng bởi dấy phẩy.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
    (
        '2018 Winter Promotion',
        0.2,
        '20181201',
        '20190101'
    );

Gán dữ liệu cho khóa chính tăng tự động

Khác với MySQL, SQL Server không cho phép bạn gán dữ liệu cho khóa chính tăng tự động (identity), vì vậy khi bạn cố tình gán thì sẽ bị và không thêm được.

Hãy xem câu truy vấn dưới đây:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
INSERT INTO sales.promotions (
    promotion_id,
    promotion_name,
    discount,
    start_date,
    expired_date
) OUTPUT inserted.promotion_id
VALUES
    (
        4,
        '2019 Spring Promotion',
        0.25,
        '20190201',
        '20190301'
    );

Mình đã cố gắng gán giá trị cho ID là 4 nên khi chạy câu SQL này sẽ bị lỗi như sau:

1
2
Cannot insert explicit value for identity column in
table 'promotions' when IDENTITY_INSERT is set to OFF.

Ý nó muốn bạn hãy tắt Identity trước rồi mới gán được data cho ID.

Để tắt / mở Identity cho thao tác Insert thì bạn chạy câu SQL sau:

ON
1
SET IDENTITY_INSERT table_name ON;

OFF
1
SET IDENTITY_INSERT table_name OFF;

Như vậy tổng câu lệnh SQL cho phần này như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SET IDENTITY_INSERT sales.promotions ON;
  
INSERT INTO sales.promotions (
    promotion_id,
    promotion_name,
    discount,
    start_date,
    expired_date
)
VALUES
    (
        4,
        '2019 Spring Promotion',
        0.25,
        '20190201',
        '20190301'
    );
  
  
SET IDENTITY_INSERT sales.promotions OFF;

Trong bài học này bạn đã được học cách sử dụng lệnh INSERT trong SQL Server để thêm mới một dòng dữ liệu vào table.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master