建立视图的时候使用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 行受影响)