【Transact-SQL】教材3.7“视图”的部分例题(VIEW)

3.84

GO
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM     Student
WHERE  Sdept= 'IS';
GO
SELECT * FROM IS_Student

3.89

GO
CREATE VIEW S_G(Sno,Gavg)
AS
  SELECT Sno,AVG(Grade)
  FROM  SC
  GROUP BY Sno;
GO
SELECT * FROM S_G

3.94

SELECT *
FROM  (SELECT Sno,AVG(Grade)
       FROM  SC
       GROUP BY Sno) AS S_G(Sno,Gavg)
WHERE Gavg>=86;

【with check option】标准SQL & T-SQL

create view View_Stu_1
as
select Sno,Sname,Ssex,Sage,Sdept
from Student
where Sdept='IS'

go

create view View_Stu_2
as
select Sno,Sname,Ssex,Sage,Sdept
from Student
where Sdept='IS'
with check option;

go

insert into View_Stu_1(Sno,Sname,Ssex,Sage)--无With check option: 执行正确。  Sdept会自动补充Null。
values ('95007111','张兰11','F','19')

insert into View_Stu_2(Sno,Sname,Ssex,Sage) --有With check option: 执行错误。  没有Sdept会报错,不能够为Sdept自动补充IS。
values ('950072000','李勇00','F','19')

insert into View_Stu_2(Sno,Sname,Ssex,Sage,Sdept) --有With check option: 执行错误。有Sdept为CS,不正常执行。
values ('951000071','王1五','F2','19','CS')

insert into View_Stu_2(Sno,Sname,Ssex,Sage,Sdept) --有With check option: 执行正确。有Sdept为IS,可以正常执行。
values ('95007211','李勇11','F','19','IS')

select * from Student
select * from View_Stu_1
select * from View_Stu_2

-- 结论:
-- 标准SQL中,view 定义中有 with check option,insert 语句可以自动加条件 Sdept = IS,并最终写入表Student。
-- TSQL中,view 定义中有 with check option,insert并不能完成标准SQL的操作,执行语句会报错;仅能完成对 Sdept的 检查。
-- 也就是说,TSQL中,insert必须写Sdept。当 Sdept = IS 时,正确;Sdept = CS 时,报错。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值