คำตอบสั้น ๆ นั่นคือ ในขณะที่คุณสามารถป้อนหลายตารางในส่วนfrom
คำสั่งการปรับปรุงคุณสามารถระบุได้เพียงตารางเดียวหลังจากupdate
คำหลัก แม้ว่าคุณจะเขียนมุมมอง "updatable" (ซึ่งเป็นเพียงมุมมองที่ตามหลังข้อ จำกัด บางอย่าง) การปรับปรุงเช่นนี้จะล้มเหลว นี่คือคลิปที่เกี่ยวข้องจากเอกสาร MSDN (เน้นเป็นของฉัน)
อัพเดท (Transact-SQL)
มุมมองที่อ้างอิงโดย table_or_view_name ต้องสามารถอัปเดตได้และอ้างอิงหนึ่งตารางฐานในส่วนคำสั่ง FROM ของมุมมอง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับมุมมองที่อัพเดตได้ดูสร้างมุมมอง (Transact-SQL)
สร้างมุมมอง (Transact-SQL)
คุณสามารถปรับเปลี่ยนข้อมูลของตารางพื้นฐานผ่านมุมมองตราบเท่าที่เงื่อนไขต่อไปนี้เป็นจริง:
- การปรับเปลี่ยนใด ๆ รวมทั้ง UPDATE, INSERT, และงบลบต้องอ้างอิงคอลัมน์จากเพียงตารางฐานหนึ่ง
- คอลัมน์ที่กำลังแก้ไขในมุมมองจะต้องอ้างอิงข้อมูลพื้นฐานในคอลัมน์ตารางโดยตรง คอลัมน์ไม่สามารถรับได้ด้วยวิธีอื่นเช่นผ่านต่อไปนี้:
- ฟังก์ชั่นรวม: AVG, COUNT, SUM, MIN, MAX, จัดกลุ่ม, STDEV, STDEVP, VAR และ VARP
- การคำนวณ คอลัมน์ไม่สามารถคำนวณได้จากนิพจน์ที่ใช้คอลัมน์อื่น คอลัมน์ที่เกิดขึ้นโดยใช้ตัวดำเนินการกำหนดค่า UNION, UNION ALL, CROSSJOIN, EXCEPT และ INTERSECT จำนวนการคำนวณและไม่สามารถอัปเดตได้
- คอลัมน์ที่กำลังแก้ไขจะไม่ได้รับผลกระทบจากคำสั่ง GROUP BY, HAVING หรือ DISTINCT
- TOP ไม่ได้ใช้ที่ใดก็ได้ใน select_statement ของมุมมองพร้อมกับส่วนคำสั่ง WITH CHECK OPTION
คุณควรพิจารณาใช้คำสั่ง SQL สองคำสั่งที่แตกต่างกันภายในธุรกรรมตามตัวอย่างของ LBushkin
UPDATE: การยืนยันดั้งเดิมของฉันที่คุณสามารถอัปเดตหลายตารางในมุมมองที่อัปเดตได้ผิด บน SQL Server 2005 และ 2012 มันจะสร้างข้อผิดพลาดต่อไปนี้ ฉันแก้ไขคำตอบของฉันเพื่อสะท้อนสิ่งนี้แล้ว
Msg 4405, Level 16, State 1, Line 1
View or function 'updatable_view' is not updatable because the modification affects multiple base tables.