可更新檢視有以下三條規則:
(1) 若檢視是基於多個表使用聯接操作而匯出的,那麼對這個檢視執行更新操作時,每次只能影響其中的一個表。
(2) 若檢視匯出時包含有分組和聚合操作,則不允許對這個檢視執行更新操作。
(3) 若檢視是從一個表經選擇、投影而匯出的,並在檢視中包含了表的主鍵字或某個候選鍵,這類檢視稱為‘行列子集檢視’。對這類檢視可執行更新操作。
另外,關於可更新檢視的一些更具體的描述如下:
如果檢視沒有INSTEAD OF觸發器,或者檢視不是分割槽檢視,則檢視只有滿足下列條件才可更新:
select語句在選擇列表中沒有聚合函式,也不包含TOP,GROUP BY,UNION(除非檢視是分割槽檢視)或DISTINCT子句。聚合函式可以用在FROM子句的子查詢中,只要不修改函式返回的值。
select語句的選擇列表中沒有派生列。派生列是由任何非簡單列表達式(使用函式、加法或減法運算子等)所構成的結果集列。
select語句中的FROM子句至少引用一個表。select語句不能只包含非表格格式的表示式(即不是從表派生出的表示式)。
INSERT, UPDATE和DELETE語句在引用可更新檢視之前,也必須如上述條件指定的那樣滿足某些限制條件。只有當檢視可更新,並且所編寫的UPDATE或 INSERT語句只修改檢視的FROM子句引用的一個基表中的資料時,UPDATE和INSERT語句才能引用檢視。只有當檢視在其FROM子句中只引用一個表時,DELETE語句才能引用可更新的檢視。
可更新檢視有以下三條規則:
(1) 若檢視是基於多個表使用聯接操作而匯出的,那麼對這個檢視執行更新操作時,每次只能影響其中的一個表。
(2) 若檢視匯出時包含有分組和聚合操作,則不允許對這個檢視執行更新操作。
(3) 若檢視是從一個表經選擇、投影而匯出的,並在檢視中包含了表的主鍵字或某個候選鍵,這類檢視稱為‘行列子集檢視’。對這類檢視可執行更新操作。
另外,關於可更新檢視的一些更具體的描述如下:
如果檢視沒有INSTEAD OF觸發器,或者檢視不是分割槽檢視,則檢視只有滿足下列條件才可更新:
select語句在選擇列表中沒有聚合函式,也不包含TOP,GROUP BY,UNION(除非檢視是分割槽檢視)或DISTINCT子句。聚合函式可以用在FROM子句的子查詢中,只要不修改函式返回的值。
select語句的選擇列表中沒有派生列。派生列是由任何非簡單列表達式(使用函式、加法或減法運算子等)所構成的結果集列。
select語句中的FROM子句至少引用一個表。select語句不能只包含非表格格式的表示式(即不是從表派生出的表示式)。
INSERT, UPDATE和DELETE語句在引用可更新檢視之前,也必須如上述條件指定的那樣滿足某些限制條件。只有當檢視可更新,並且所編寫的UPDATE或 INSERT語句只修改檢視的FROM子句引用的一個基表中的資料時,UPDATE和INSERT語句才能引用檢視。只有當檢視在其FROM子句中只引用一個表時,DELETE語句才能引用可更新的檢視。