博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MSSQLSERVER数据库- 视图
阅读量:5049 次
发布时间:2019-06-12

本文共 2410 字,大约阅读时间需要 8 分钟。

        “视图是由基于一个或多个表的一个查询所定义的虚拟表,它将查询的具体定义保存起来,视图不包含任何数据。” 前面这句是我在网上找的视图的定义,对于初接触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

student 133575514 NULL 1 0 U  USER_TABLE 2012-08-04 16:03:00.613
Employee 597577167 NULL 1 0 U  USER_TABLE 2012-08-04 16:53:40.557
comment 709577566 NULL 1 0 U  USER_TABLE 2012-08-05 21:25:56.637
article 741577680 NULL 1 0 U  USER_TABLE 2012-08-05 21:27:46.980
teacher 2121058592 NULL 1 0 U  USER_TABLE 2012-08-04 14:41:58.470

从name字段可以看过,我们把当前数据库的全部表名都查找出来了。

2、我们输入SQL语句:

select * from sys.databases

从name字段可以看过,我们把当前数据库的全部数据库名都查找出来了。

3、我们输入SQL语句

select * from

INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='student'

结果显示

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION

MySchool dbo student sid 1
MySchool dbo student sname 2
MySchool dbo student sage 3
MySchool dbo student ssex 4
MySchool dbo student tid 5

我们可以从 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_Studentas	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_Studentas	select sname,sage from student where sid=1

视图的注意事项

  • 视图不包括结合
  • 视图不包括Group By子句
  • 视图不包括Union语句
  • 视图不包含对伪字段RowNum的任何引用
  • 视图不包含任何组函数
  • 不能使用Distinct子句
  • Where子句包含的嵌套的表表达式不能与From子句引用同一个表

 

转载于:https://www.cnblogs.com/cxeye/archive/2012/08/08/2627732.html

你可能感兴趣的文章
SpringBoot使用其他的Servlet容器
查看>>
关于cookie存取中文乱码问题
查看>>
k8s架构
查看>>
select 向上弹起
查看>>
mysql 多表管理修改
查看>>
group by order by
查看>>
bzoj 5252: [2018多省省队联测]林克卡特树
查看>>
https 学习笔记三
查看>>
华为“云-管-端”:未来信息服务新架构
查看>>
基于Sentinel实现redis主从自动切换
查看>>
函数(二)
查看>>
oracle中所有存在不存在的用户都可以使用dba连接到数据库
查看>>
函数式编程思想
查看>>
java安全沙箱(二)之.class文件检验器
查看>>
Oracle学习之简单查询
查看>>
log4j配置
查看>>
linux 配置SAN存储-IPSAN
查看>>
双链表
查看>>
java学习笔记之String类
查看>>
pymysql操作mysql
查看>>