视图创建:
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH <view_attribute> [ ,...n ] ] AS select_statement [ WITH CHECK OPTION ] [ ; ]
OR ALTER
适用范围:Azure SQL 数据库、SQL Server(从 SQL Server 2016 (13.x) SP1 开始)。
有条件地删除视图(仅当其已存在时)。
schema_name
视图所属架构的名称。
view_name
视图名称。 视图名称必须符合有关标识符的规则。 可以选择是否指定视图所有者名称。
column
视图中的列使用的名称。 仅在下列情况下需要列名:列是从算术表达式、函数或常量派生的;两个或更多的列可能会具有相同的名称(通常是由于联接的原因);视图中的某个列的指定名称不同于其派生来源列的名称。 还可以在 SELECT 语句中分配列名。
如果未指定 column,则视图列将获得与 SELECT 语句中的列相同的名称。
AS
指定视图要执行的操作。
select_statement
定义视图的 SELECT 语句。 该语句可以使用多个表和其他视图。 需要相应的权限才能在已创建视图的 SELECT 子句引用的对象中选择。
视图不必是具体某个表的行和列的简单子集。 可以使用多个表或带任意复杂性的 SELECT 子句的其他视图创建视图。
在索引视图定义中,SELECT 语句必须是单个表的语句或带有可选聚合的多表 JOIN。
视图定义中的 SELECT 子句不能包括下列内容:
ORDER BY 子句,除非在 SELECT 语句的选择列表中也有一个 TOP 子句。
注意:
ORDER BY 子句仅用于确定视图定义中的 TOP 或 OFFSET 子句返回的行。 ORDER BY 不保证在查询视图时得到有序结果,除非在查询本身中也指定了 ORDER BY。
CHECK OPTION
要求对该视图执行的所有数据修改语句都必须符合 select_statement 中所设置的条件。 通过视图修改行时,WITH CHECK OPTION 可确保提交修改后,仍可通过视图看到数据。
注意:
CHECK OPTION 仅适用于通过视图进行的更新。 它不适用于直接对视图的基础表执行的任何更新。
例子:
--判断视图是否存在
if exists(select * from sysobjects where name='view_ScoreQuery')
drop view view_ScoreQuery
go
--创建视图
create view view_ScoreQuery
as
select top 1000 Students.StudentId,StudentName,ClassName,
C#=CSharp,SQLDB=SQLServerDB,
ScoreSum=(CSharp+SQLServerDB) from Students
inner join ScoreList on Students.StudentId=ScoreList.StudentId
inner join StudentClass on Students.ClassId=StudentClass.ClassId
order by StudentClass.ClassId
go
--使用视图查询
select * from view_ScoreQuery