sql 创建视图语法示例

 

--创建视图


--视图只会引用存放在表中的数据


--使用代码创建视图
create view viewname --创建视图
as
sql select statement

alter view viewname --修改视图
as
sql select statement

drop view viewname --删除视图

create view v_eventlist
as
select ct.name as customertypename,c.lastname,c.firstname,c.nickname,emc.confirmdate,
e.code,e.datebegin,t.name as tourname,b.name as basecampname,e.comment
from tour as t
join event as e on e.tourid=t.tourid
join event_mm_customer as emc on emc.eventid=e.eventid
join customer as c on c.customerid=emc.customerid
join customertype as ct on ct.customertypeid=c.customertypeid
join basecamp as b on b.basecampid=t.basecampid


--视图不能包含select into选项
--视图不能引用临时表(名字中包含#的表)或者表变量
--视图不能包含compute或者compute by列,它只能使用标准的聚合函数和分组功能

--with check option 子句
--利用with check option子句,视图的where子句除了可以用来筛选检索的数据以外,还可以对插入和更新的数据进行检查。
--也就是说加了它后,对此视图的插入和更新数据都要符合构成此视图语句的where子句的条件(符合where条件的数据才能插入和更新)。
create view v_chatour
as
select [name] as tourname,basecampid
from tour
where basecampid=2
with check option

insert v_chatour (tourname,basecampid) values ('ccc',1) --插入失败
insert v_chatour (tourname,basecampid) values ('www',2) --插入成功

--在创建视图的sql语句中若没有TOP则不能使用order by
create view v_chatour
as
select top 10 basecampid,[name] as tourname --若没有此处的top 10,则下面的order by 出错
from tour
order by basecampid

--使用架构绑定选项(with schemabinding),为视图锁定基础表
create table test(fullname char(20))

create view v_test
with schemabinding
as
select fullname from dbo.test --*必须指定表的所有者dbo等

alter table test
alter column fullname char(30) --无法修改

--with encryption,加密视图源代码
select text from syscomments join sysobjects on sysobjects.id=syscomments.id --系统表中获得视图源代码
where name='v_test'

alter view v_test
with encryption --加密。加密后再执行上面的语句视图源代码就会乱码了。去掉此行,再执行此段代码,则解密。
as
select fullname from dbo.test


--可更新的视图
--1.只能对一个表进行更新
--2.可以使用视图或者基础表上的instead of触发器来对数据修改操作进行变更
--3.如果在视图中包含了聚合函数或者group by子句,那么视图就是不可更新的
--4.如果在视图中把一个子查询作为导出表来引用,,那么就不能将这个导出表中的任何一列作为视图的列输入,但是,可以在作为导出表的子查询中使用聚合函数
--5.如果视图包含了with check option ,那么,对视图的insert和update操作就必须满足where子句中条件的要求
--6.要对进行insert或者update操作的列必须对应于基础表中的唯一一个列。如果同一个列名出现在两个表,就应该在选择列表中明确地使用table.column的方式来唯一地标识它

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值