视图是基于结果集的可视化的表,用于简化查询,对视图的操作不会影响到数据库本身。
1.创建视图
CREATE VIEW 视图名 AS SELECT 列名表 FROM 源表名
-- 例如:
CREATE VIEW PointsTransactionsView AS
select point.*,type.[TypeName],type.[Description]
from [dbo].[PointTypes] type join [dbo].[PointsTransactions] point
on type.Id = point.PointTypeId;
2.查看已创建视图
方法一:使用sys.views
视图
SELECT * FROM sys.views;
方法二:使用SSMS(SQL Server Management Studio)
3.删除视图
DROP VIEW 视图名
-- 例如:
DROP VIEW PointsTransactionsView;
4.视图更新
sp_refreshview 视图名
因为视图是基于表的,这相当于使用存储过程来刷新了视图。
(1)当添加一个列时,因为这个列不在视图创建时要求的列中(即便创建时使用了*,也只表示那个时候的全部,并不包括这个列),是不会对视图有影响的。
但是,如果你使用*的初衷不是为了只使用当前表中全部的列,还希望当表增加新的列时视图也能增加,这时候就需要去更新视图了。
-- 例:
CREATE VIEW PointsTransactionsView AS
select point.*,type.[TypeName],type.[Description]
from [dbo].[PointTypes] type join [dbo].[PointsTransactions] point
on type.Id = point.PointTypeId
alter table [dbo].[PointsTransactions] add [RequiredPoints] VARCHAR(10);
sp_refreshview PointsTransactionsView;
(2)因为视图来自表,所以在表中删除了视图中使用了的列(这时候没问题,因为视图不影响表),在查看视图时会报错,即便查看的仅是没删除的列。这时候就需要刷新视图。
-- 例:
alter table [dbo].[PointsTransactions] DROP column [RequiredPoints];
SELECT [Description] FROM PointsTransactionsView;
这个时候刷新视图,查询就正确了,删除的列也没有了。
(3)对于原表中的数据进行了更改,视图会自动更新,无需操作。