Bunun kısa cevabı hayır. from
Bir güncelleme ifadesinin yan tümcesine birden çok tablo girebilirsiniz , ancak update
anahtar kelimeden sonra yalnızca tek bir tablo belirtebilirsiniz . "Güncellenebilir" bir görünüm yazsanız bile (yalnızca belirli kısıtlamalara uyan bir görünümdür), bunun gibi güncellemeler başarısız olur. İşte MSDN belgelerindeki ilgili klipler (vurgu benimdir).
GÜNCELLEME (Transact-sql)
Table_or_view_name tarafından başvurulan görünüm güncelleştirilebilir olmalı ve görünümün FROM yan tümcesinde tam olarak bir temel tabloya başvurmalıdır . Güncellenebilir görünümler hakkında daha fazla bilgi için bkz. GÖRÜNÜM OLUŞTUR (Transact-sql).
GÖRÜNÜMÜ OLUŞTUR (Transact-sql)
Aşağıdaki koşullar geçerli olduğu sürece, temel alınan temel tablonun verilerini bir görünüm aracılığıyla değiştirebilirsiniz:
- UPDATE, INSERT ve DELETE deyimleri dahil olmak üzere tüm değişiklikler, yalnızca bir temel tablodaki sütunlara başvurmalıdır .
- Görünümde değiştirilen sütunlar, tablo sütunlarındaki temel verilere doğrudan başvurmalıdır. Sütunlar, aşağıdakiler gibi başka bir şekilde türetilemez:
- Toplama işlevi: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR ve VARP.
- Bir hesaplama. Sütun, diğer sütunları kullanan bir ifadeden hesaplanamaz. UNION, UNION ALL, CROSSJOIN, EXCEPT ve INTERSECT ayarlanmış işleçleri kullanılarak oluşturulan sütunlar bir hesaplama anlamına gelir ve ayrıca güncelleştirilemez.
- Değiştirilen sütunlar GROUP BY, HAVING veya DISTINCT deyimlerinden etkilenmez.
- TOP, WITH CHECK OPTION yantümcesi ile birlikte görünümün select_statement kısmında hiçbir yerde kullanılmaz.
Her şeye rağmen, LBushkin örneğine göre bir işlem içinde iki farklı SQL ifadesi kullanmayı düşünmelisiniz.
GÜNCELLEME: Güncellenebilir bir görünümde birden çok tabloyu güncelleyebileceğinize ilişkin orijinal iddiam yanlıştı. SQL Server 2005 ve 2012'de aşağıdaki hatayı oluşturur. Bunu yansıtmak için cevabımı düzelttim.
Msg 4405, Level 16, State 1, Line 1
View or function 'updatable_view' is not updatable because the modification affects multiple base tables.