MSSQLSERVER数据库- 视图
??????? “视图是由基于一个或多个表的一个查询所定义的虚拟表,它将查询的具体定义保存起来,视图不包含任何数据。” 前面这句是我在网上找的视图的定义,对于初接触MSSQLSERVER视图的人,一眼读过去,可能也不解其意,不过没有关系,大概记住就行了,在实际使用过后再来看这句,你就知道他在讲什么了。 ??????? 视图在操作上和数据表没有什么区别,但两者的差异是在其本质上的。数据表是实际存储记录的地方,然而视图并不是保存任何记录,它存储的实际上是查询语句。相同的数据表,根据不同用户的不同需求,可以创建不同的视图。 ??????? 视图的作用主要是用来查询,但也可以对视图进行增删改的操作,对视图的增删改操作实际是通过视图的变化引起基表数据的变化。这篇文章不会写到对视图的增删改操作,因为我认为没有必要对视图进行这方面的操作,我现在的理解仅是将视图作为查询操作,在实际应用上也是如此。 ? 我们首先来看一下系统视图 ???????????????????????????????? ? ???? (图1) 从图1我们可以看,MSSQL数据里内置了如此之多的系统视图。那么这些视图里面存放的是什么东西? 1、我们输入SQL语句: select * from sys.tables 结果显示: name?object_id?principal_id?schema_id?parent_object_id?type?type_desc?create_date 从name字段可以看过,我们把当前数据库的全部表名都查找出来了。 2、我们输入SQL语句: select * from sys.databases 从name字段可以看过,我们把当前数据库的全部数据库名都查找出来了。 3、我们输入SQL语句 select * from 结果显示 TABLE_CATALOG?TABLE_SCHEMA?TABLE_NAME?COLUMN_NAME?ORDINAL_POSITION 我们可以从?COLUMN_NAME获得student表的全部字段。 那么你可能会问得到这些系统视图有什么用? 我实际用过一次,可以根据这些系统视图所获得的内容来做某种类型的代码生成器。 SQL视图的其他应用举列: --如果存在该数据库那么先把他删除掉再创建 if exists(select * from sys.database where name='test') drop database test create database test --如果存在该表那么先把他删除掉再创建 if exists(select * from sys.objects where name = 'test') drop table test create table test ( tid int primary key identity(1,1),tName nvarchar(50) null,tAge int ) --为该表创建一个年龄检测约束,约束范围在18-70岁之间,如果存在该约束则删除后创建 if exist(select * from sys.objects where name='UQ_TEST_TNAME' alter table test drop constraint UQ_TEST_TNAME alter table test add constraint UQ_TEST_TNAME CHECK(tAge>=18 and tAge<=70) 怎么创建视图 create view v_Student as select sname,sage from student select * from v_Student; 创建好后就可当作一个表来使用 ?select * from v_Student 怎么删除视图 if exists(select * from sys.objects where name='v_Student') drop view v_Student
alter view v_Student as select sname,sage from student where sid=1
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |