如何创建SQL Server视图

日期: 2013-11-28 作者:Robert Sheldon翻译:Ranma 来源:TechTarget中国 英文

本文是关于SQL Server视图的第一篇文章。本文将介绍SQL Server视图的概念并演示如何创建它们。第二篇文章会介绍如何在视图上索引化和更新基础数据。 在SQL Server数据库中你可以创建的对象之一就是视图,它是可以从一个或多个表(或其他视图)中检索数据的虚拟表,此过程类似于用一条SELECT语句返回一个数据集。

SQL Server视图会抽象出底层表模式却如同一个常规表一样以记录和字段的方式展示数据。因此,用户以及应用程序可以像查询一个表一样查询一个视图,但是此视图定义了什么样的数据是它们可以看到的和数据是如何被引用的。 你可以把SQL Server视图看做是可以简化和控制数据访问……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

本文是关于SQL Server视图的第一篇文章。本文将介绍SQL Server视图的概念并演示如何创建它们。第二篇文章会介绍如何在视图上索引化和更新基础数据。

SQL Server数据库中你可以创建的对象之一就是视图,它是可以从一个或多个表(或其他视图)中检索数据的虚拟表,此过程类似于用一条SELECT语句返回一个数据集。SQL Server视图会抽象出底层表模式却如同一个常规表一样以记录和字段的方式展示数据。因此,用户以及应用程序可以像查询一个表一样查询一个视图,但是此视图定义了什么样的数据是它们可以看到的和数据是如何被引用的。

你可以把SQL Server视图看做是可以简化和控制数据访问的过滤器。它们本质上是提供查询返回数据快照的命名查询。SQL Server视图不仅可以让你关注并自定义如何展示数据,而且它们还可以通过抽象底层数据结构来提供一个额外安全层。你可以在不授权访问视图所基于的表的情况下授权访问一个视图。

SQL Server视图还可以抽象对底层表的模式变更。例如,如果一个应用程序通过一个视图来检索数据并且此视图的结构(返回字段)保持不变,那么可以在不影响视图访问的情况下改变此视图的查询来适应底层表的变化。视图还可以用来提供向后兼容性来模拟一个显著变化或不再存在的表。

在本文中,我会为你介绍SQL Server视图并给出它们是如何工作的示例。这些示例基于在SQL Server 2012的一个本地实例上所创建的AdventureWorks2012数据库中的两个表。以下代码显示了我创建这些表的T-SQL:

SQL Server视图

正如你所看到的,我用了两个 SELECT…INTO语句来定义并填充CurrentEmployee 和EmployeeInfo表。如果你想要尝试此练习,你只需要执行此T-SQL就可以了。如果你正在执行一个AdventureWorks数据库不同的版本,你可能就必须调整代码和示例来让它们能在你的系统上工作。

CREATE VIEW语法

在SQL Server中创建一个视图,要使用CREATE VIEW语句,如下面语法中所示:

CREATE VIEW语法

你会以 CREATE VIEW语句作为开始,提供名称以及可选性的提供你想要定义此视图的模式。如果你不指定模式名称,则会使用默认模式。

接下来,你可以指定一个或多个字段名,它们包含在圆括号中并以逗号进行分隔。用户会在查询此视图的时候看到这些字段。如果你不包含这些字段名,那么视图就会使用SELECT语句返回的名称。如果你想要使用不同的名称 – 或者你正在创建计算字段 – 你便可以将字段名包含在这里,即CREATE VIEW语句之后,或是在你查询的SELECT列表中指定字段别名。在这些字段名之后,你可以包含一个WITH语句,它可以接受一个或多个如下三项参数:

  1. 加密: 加密 CREATE VIEW语句文本并防止SQL Server从发布的视图进行复制。
  2. 模式绑定: 把视图绑定到SELECT 语句中所引用的表上,这样这些表就不能以任何会影响到视图的方式被修改。
  3. 视图元数据: 返回视图的元数据信息以代替基表的相关信息。它得以应用的场景是当视图通过DB-Library, ODBC或是OLE DB API被查询以及当查询请求浏览模式的元数据的时候。

在可选的 WITH语句之后,你可以指定AS关键字,紧跟着的是访问底层数据的查询。此查询是一条从一个或多个表或视图中检索数据的标准SELECT语句。你还可以通过使用 UNION操作符连接SELECT语句来检索分区数据。但是,你不能包含ORDER BY语句,除非SELECT列表包含一个TOP语句。此外,你不能使用INTO关键字或OPTION语句,并且你不能引用一个临时表或表变量。

CREATE VIEW定义的最后一个可选元素是WITH CHECK OPTION,它可以强制执行所有视图的数据修改语句以与视图的SELECT语句相符合。换句话说就是,如果会影响视图以某种方式返回数据,即视图不再返回数据,那么WITH CHECK OPTION可以避免数据被更新。要更好的理解此项,同样还有其他与视图定义相关的项目,请参阅SQL Server联机丛书中的文章《创建视图(Transact-SQL)》。

在SQL Server中创建视图

一旦你对CREATE VIEW语法有了一个基本了解,那么你就做好了建立你自己视图的准备。以下示例包含了一个 CREATE VIEW语句来定义vEmployees视图:

在SQL Server中创建视图

首先,我们使用一个IF语句来检查视图是否存在然后在它存在的情况下进行删除。接着我们执行CREATE VIEW语句。我们以CREATE VIEW语句作为开始然后指定返回数据要使用的字段名。再一次,你就不需要在这里指定字段名了;你可以替代使用那些由 SELECT语句返回的内容。

在这些字段名之后,指定了WITH SCHEMABINDING语句以确保在会影响视图的情况下表不会被更新。接下来是AS关键字,然后才是实际查询。

SELECT语句连接CurrentEmployee和EmployeeInfo表,从CurrentEmployee表返回 BusinessEntityID,FirstName和LastName字段,从 EmployeeInfo表返回JobTitle和HireDate字段。注意视图定义会把字段名BusinessEntityID改为EmployeeID,将HireDate改为DateHired。

一旦你已经创建好了视图,你就可以像是在一个表中一样在一个查询中调用它。例如,以下SELECT语句从vEmployees视图检索几个数据字段:

SELECT语句从vEmployees视图检索数据字段

注意,我们是根据字段名在视图中的定义方式来对它们进行引用的。在本例中,我们使用的是EmployeeID而非BusinessEntityID。我们还连接了 FirstName和LastName两个字段并将结果命名为FullName。我们甚至可以像对表一样来限制查询,如下例中所示:

sql查询

这一次,我们添加了一个WHERE语句来指定年份必须大于2002。然后,我们在视图中引用字段名(DateHired),而不是表的字段名

当然,你可以创建比我们之前两个例子更为复杂的查询,但我们在这里所展示的应该可以让你对视图是如何工作的有一个很好的理解。

翻译

Ranma
Ranma

相关推荐