lệnh INSERT trong SQL Server – Freetuts

Ở 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.

test php

banquyen png

Bài viết này được đăng tại

freetuts.net

, không được copy dưới mọi hình thức.

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 :

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 .Bài viết này được đăng tại [ không tính tiền tuts. net ]

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

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

Giá trị của những 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à những ví dụ minh họa cho những trường hợp thường gặp khi thêm tài 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 :

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 chú ý đến những ràng buộc nhé, nó rất quan trọng trong việc giải quyết và xử lý tài 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 thông thường .

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 row affected)

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

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 .

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 .

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 được cho phép bạn gán tài liệu cho khóa chính tăng tự động hóa ( identity ), thế cho nên khi bạn cố ý gán thì sẽ bị và không thêm được .
Hãy xem câu truy vấn dưới đây :

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:

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

SET IDENTITY_INSERT table_name ON;

OFF

SET IDENTITY_INSERT table_name OFF;

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

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.