您的位置:首页 > 数据库

sql创建视图语法示例

2014-05-27 00:17 447 查看
-创建视图

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

--使用代码创建视图

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的方式来唯一地标识它
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql