with check option(视图 )

建立视图的时候使用WITH CHECK OPTION 与不使用的区别

WITH CHECK OPTION
  insert update  delete
使用with check option 保证insert后,数据要被视图查询出来 保证update后,数据要被视图查询出来 无要求
未使用with check option 无要求 无要求

无要求

--========================================建立测试表TAB
--DROP TABLE TAB
CREATE TABLE TAB
(
  ID INT,
  NAME VARCHAR(10),
  LOC VARCHAR(100)
)
---=======================================插入业务数据测试
INSERT INTO TAB SELECT 1,'JACK','ChangSha' UNION ALL
                SELECT 2,'TOM','ShangHai' UNION ALL
                SELECT 3,'JACK','Kunming' UNION ALL
                SELECT 4,'JACK','Hubei' 

--===================================建立视图
--1.含有WITH CHECK OPTION的
--DROP VIEW V_WCO
GO
CREATE VIEW V_WCO
AS
SELECT * FROM TAB WHERE NAME='TOM'
WITH CHECK OPTION;

--2.不含有WITH CHECK OPTION的
--DROP VIEW V_WCO_2
CREATE VIEW V_WCO_2
AS
SELECT * FROM TAB WHERE NAME='TOM'
--================更新视图============--
--###########===INSERT===############--
--INSERT 视图查询结果集中不包含的记录

Insert  into V_WCO SELECT 5,'JACK','QuJin'

--INSERT 视图查询结果集中包含的记录
insert into V_WCO SELECT 5,'TOM','QuJin'
/*
  消息 550,级别 16,状态 1,第 1 行
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。
语句已终止。
*/



--###########===DELETE===############--


delete from V_WCO where ID=1
/*
  (0 行受影响)
*/

--###########===UPDATE===############--
---update V_WCO
update V_WCO set NAME='已更新' WHERE ID=1
--(0 行受影响)
update V_WCO set NAME='已更新' WHERE ID=2
--(1 行受影响)

                
原文地址:https://www.cnblogs.com/OliverQin/p/5075717.html