如果視圖定義包括條件(譬如 WHERE 子句)並且其意圖是確保任何引用該視圖的 INSERT 或 UPDATE 語句都應用 WHERE 子句,則必須使用 WITH CHECK OPTION 定義該視圖。這個選項可以確保數據庫中正在修改的數據的完整性。如果在 INSERT 或 UPDATE 操作期間違反了條件,則返回 SQL 錯誤。
下面是一個使用了 WITH CHECK OPTION 的視圖定義的示例。要確保總是檢查條件,WITH CHECK OPTION 是必需的。在這種情況下,我們希望確保 DEPT 總是 10。這會限制 DEPT 列的輸入值。當使用視圖插入新值時,總是強制執行 WITH CHECK OPTION。
代碼如下:
CREATE VIEW EMP_VIEW2
(EMPNO,EMPNAME,DEPTNO,JOBTITLE,HIREDATE)
AS SELECT ID,NAME,DEPT,JOB,HIREDATE FROM EMPLOYEE
WHERE DEPT=10
WITH CHECK OPTION;
如果這個子句不存在,那麼某個使用該視圖的用戶就有可能更新某條記錄,使其不再屬於該視圖。例如,下列 SQL 語句可能會引起一些問題。
UPDATE EMP_VIEW2 SET DEPT=20 WHERE DEPT=10;
這個語句的結果是該視圖現在不包含任何記錄,因為部門 10 不再有雇員了。