Trong SQL Server (Transact-SQL), lệnh UPDATE được dùng để cập nhật các bản ghi hiện có trên một bảng trong cơ sở dữ liệu SQL Server. Có 3 cú pháp cho lệnh UPDATE, tùy thuộc vào việc bạn cập nhật kiểu truyền thống hay cập nhật bảng với dữ liệu từ bảng khác.
Cú pháp lệnh UPDATE
Cú pháp cập nhật bảng trong SQL Server
UPDATE bang
SET cot1 = bieu_thuc1,
cot2 = bieu_thuc2,
…
[WHERE dieu_kien];
Cú pháp cập nhật bảng với dữ liệu từ bảng khác (kết hợp SELECT)
UPDATE bang1
SET cot1 = (SELECT bieu_thuc1
FROM bang2
WHERE dieu_kien)
[WHERE dieu_kien];
Cú pháp thay thế cập nhật bảng với dữ liệu từ bảng khác (dùng JOIN)
UPDATE bang1
SET bang1.cot = bang2.bieu_thuc1
FROM bang1
INNER JOIN bang2
ON (bang1.cot1 = bang2.cot1)
[WHERE dieu_kien];
Tham số
cot1, cot2: Cột cần cập nhật.
bieu_thuc1, bieu_thuc2: Giá trị mới gán cho cot1, cot2. cot1 nhận giá trị bieu_thuc1, cot2 nhận bieu_thuc2.
WHERE dieu_kien: Tùy chọn. Điều kiện phải thỏa mãn để bản ghi được cập nhật.
Ví dụ – cập nhật 1 cột
UPDATE nhanvien
SET ho = 'Johnson'
WHERE nhanvien_id = 10;
Lệnh UPDATE này sẽ cập nhật họ nhân viên thành 'Johnson' nếu nhanvien_id là 10.
Ví dụ – cập nhật nhiều cột
Ví dụ cập nhật nhiều hơn một cột chỉ với một lệnh UPDATE.
UPDATE nhanvien
SET ten = 'Kyle',
nhanvien_id = 14
WHERE ho = 'Johnson';
Nếu muốn cập nhật nhiều cột, chỉ cần tách cột/giá trị bằng dấu phẩy.
Lệnh UPDATE trên sẽ cập nhật tên thành 'Kyle' và nhanvien_id thành 14 nếu họ của người đó là 'Johnson'.
Ví dụ – cập nhật bảng với dữ liệu từ bảng khác
Ví dụ cập nhật bảng với dữ liệu từ bảng khác trong SQL Server.
UPDATE nhanvien
SET ten = (SELECT ten
FROM danhba
WHERE danhba.ho = nhanvien.ho)
WHERE nhanvien_id > 95;
Ví dụ trên sẽ cập nhật tất cả bản ghi trong bảng nhanvien nếu nhanvien_id lớn hơn 95. Nếu họ nhân viên có trong bảng danhba và tên trùng khớp, tên trong danh bạ sẽ được sao chép sang tên trong bảng nhân viên.
Lệnh UPDATE này có thể viết lại với cú pháp thứ hai (dùng JOIN) như sau.
UPDATE nhanvien
SET nhanvien.ten = danhba.ten
FROM nhanvien
INNER JOIN danhba
ON (nhanvien.ho = danhba.ho)
WHERE nhanvien_id > 95;