Câu trả lời ngắn gọn là không. Mặc dù bạn có thể nhập nhiều bảng trong from
mệnh đề của câu lệnh cập nhật, bạn chỉ có thể chỉ định một bảng sau update
từ khóa. Ngay cả khi bạn viết chế độ xem "có thể cập nhật" (đơn giản là chế độ xem tuân theo các hạn chế nhất định), các cập nhật như thế này sẽ thất bại. Dưới đây là các clip có liên quan từ tài liệu MSDN (nhấn mạnh là của tôi).
CẬP NHẬT (Giao dịch-SQL)
Chế độ xem được tham chiếu bởi table_or_view_name phải được cập nhật và tham chiếu chính xác một bảng cơ sở trong mệnh đề TỪ của chế độ xem. Để biết thêm thông tin về các chế độ xem có thể cập nhật, hãy xem CREATE VIEW (Transact-SQL).
TẠO XEM (Giao dịch-SQL)
Bạn có thể sửa đổi dữ liệu của bảng cơ sở bên dưới thông qua chế độ xem, miễn là các điều kiện sau là đúng:
- Bất kỳ sửa đổi nào, bao gồm các câu lệnh CẬP NHẬT, CHERTN và XÓA, phải tham chiếu các cột từ chỉ một bảng cơ sở .
- Các cột được sửa đổi trong dạng xem phải tham chiếu trực tiếp dữ liệu cơ bản trong các cột của bảng. Các cột không thể được dẫn xuất theo bất kỳ cách nào khác, chẳng hạn như thông qua các điều sau đây:
- Một hàm tổng hợp: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR và VARP.
- Một tính toán. Cột không thể được tính từ một biểu thức sử dụng các cột khác. Các cột được hình thành bằng cách sử dụng các toán tử tập hợp UNION, UNION ALL, CROSSJOIN, EXCEPT và INTERSECT cho một tính toán và cũng không thể cập nhật.
- Các cột được sửa đổi không bị ảnh hưởng bởi các mệnh đề GROUP BY, HAVING hoặc DISTINCT.
- TOP không được sử dụng ở bất cứ đâu trong select_statement của chế độ xem cùng với mệnh đề VỚI KIỂM TRA TÙY CHỌN.
Tuy nhiên, trong tất cả sự trung thực, bạn nên xem xét sử dụng hai câu lệnh SQL khác nhau trong một giao dịch theo ví dụ của LBushkin.
CẬP NHẬT: Khẳng định ban đầu của tôi rằng bạn có thể cập nhật nhiều bảng trong chế độ xem cập nhật là sai. Trên SQL Server 2005 & 2012, nó sẽ tạo ra lỗi sau. Tôi đã sửa câu trả lời của mình để phản ánh điều này.
Msg 4405, Level 16, State 1, Line 1
View or function 'updatable_view' is not updatable because the modification affects multiple base tables.