65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 2005 视图概述

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (49投票s)

2009年7月28日

CPOL

9分钟阅读

viewsIcon

280956

视图概述、系统视图、视图创建、以及视图的绑定和安全。

目录

引言

在本文中,我将介绍 SQL Server 2005 中的视图。这是一个比较简单的主题。我希望这篇文章能像我的 ASP.NET 文章一样对您有所帮助。请给我您宝贵的建议和反馈,以改进我的文章。

什么是视图

视图是“虚拟表”。它不像普通表那样包含数据,而是一个虚拟表,其中包含来自一个或多个不同表中的列和数据。视图本身不包含任何数据,它是一组存储在数据库中的、作为对象存在的查询,这些查询应用于一个或多个表。在从一个或多个表创建视图后,它被用作这些表的引用,执行时,它只显示在创建视图期间的查询中指定的数据。

View1.JPG

在上面的图示中,我们从 Table1 和 Table2 创建了一个视图(View_Table1_Table2)。因此,View_Table1_Table2 将只显示那些列中的信息。让我们来看看创建视图的基本语法。

CREATE VIEW  [View Name]
AS
[SELECT Statement]

视图的用途

视图用作数据库中的安全机制。因为它可以限制用户查看某些列和行。视图只显示查询中指定的数据,因此它只显示在创建视图时定义的查询返回的数据。其余数据对最终用户完全不可见。

除了安全性,视图的另一个优点是数据抽象,因为最终用户并不了解表中的所有数据。

视图的通用语法

在本节中,我将介绍如何创建视图、从视图中选择数据以及删除视图。我创建了一个名为 ViewDemo 的数据库。它有一个名为 EmpInfo 的表,如下所示:

EmpTable.jpg

其中包含以下数据:

EmpTableData.jpg

我描述的所有示例都来自这个数据库。

创建视图

以下是创建视图的通用语法:

CREATE VIEW [View_Name]
 AS
 [SELECT Statement]

例如

CREATE VIEW SampleView
As
SELECT EmpID, EmpName  FROM EmpInfo

这将创建一个名为 SampleView 的视图,该视图将只包含 EmpID 和 EMPName。

从视图获取结果

这类似于 Select 语句。

select * from SampleView

现在来看一下 SampleView 的输出:

SampleViewOutput.jpg

删除视图

DROP VIEW SampleView

现在,如果我们想从 SampleView 中选择数据,我们会收到以下错误:

dropview.jpg

视图的不同类型

视图有两种不同类型:

  • 系统视图
    • 信息架构视图
    • 目录视图
    • 动态管理视图 (DMV)
  • 用户自定义视图
    • 简单视图
    • 复杂视图

现在,我们将看一下 SQL Server 2005 中不同类型的视图。

系统视图

在 SQL Server 中,有几个系统数据库,如 Master、Temp、msdb 和 tempdb。每个数据库都有自己的职责,例如 Master 数据是 SQL Server 2005 中创建的所有数据库的模板数据库之一。同样,系统视图是 Microsoft 创建的预定义视图,已存在于 Master 数据库中。它们也用作所有新数据库的模板视图。这些系统视图将自动插入任何用户创建的数据库中。大约有 230 个系统视图可用。

我们可以从 SQL Server Management Studio 中探索系统视图。展开任何数据库 > 视图 > 系统视图。

SystemView.jpg

在 SQL Server 中,所有系统视图都分为不同的架构。这些用于 SQL Server 数据库的安全容器。我们可以按以下方式对系统视图进行分类:

  • 信息架构视图
  • 目录视图
  • 动态管理视图 (DMV)

现在,以上所有类别本身都是庞大的主题,所以我不会详细介绍它们。让我们概述一下这些视图类型。

信息视图

这些是最重要的系统分组视图之一。此组中有二十个不同的架构视图。它们用于显示数据库的大部分物理信息,例如表和列。此类型视图的命名约定是 INFORMATION_SCHEMA.[View Name]。从系统视图图像中,我们可以获得一些信息架构视图的名称。

让我们通过一个例子来看看。

我创建了一个名为 ViewDemo 的数据库。它有一个名为 EmpInfo 的表,下图显示了表的结构。

EmpTable.jpg

现在,如果我们想使用视图了解 Empinfo 表的列的详细信息,我们需要运行以下查询:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
Where TABLE_NAME='EmpInfo'

以下将是输出:

EmpTableViewInfo.jpg

同样,我们可以使用其他架构视图来读取数据库信息。

目录视图

此类型的视图在 SQL Server 2005 中引入。目录视图也分为不同的组。它们用于显示数据库的自我描述信息。

例如

select * from sys.tables

以下是示例输出:

Catalogview.jpg

动态管理视图

这是 SQL Server 2005 中新引入的。这些视图为数据库管理员提供了有关 SQL Server 计算机当前状态的信息。这些值有助于管理员诊断问题并优化服务器以获得最佳性能。在 SQL Server 2005 中,有两种类型的 DMV:

  1. 服务器范围的 DMV:存储在 Master 数据库中。
  2. 数据库范围的 DMV:特定于每个数据库。

例如,如果我们想检查所有 SQL Server 连接,我们可以使用以下查询:

SELECT
connection_id,
session_id,client_net_address,
auth_scheme
FROM sys.dm_exec_connections

以下是示例输出:

DMV.jpg

如果您想了解 DMV 的详细信息,这里有一篇关于 CodeProject 的完整文章:动态管理视图 [DMV] - SQL Server 2005 功能 [^]。

注意:系统视图有很多东西可以学习,我只是为初学者介绍了它们。如果有人对此更感兴趣,请参考这篇文章:SQL Server 2005 系统表和视图 [^]。

用户自定义视图

到目前为止,我介绍了系统视图,现在我们将看一下用户自定义视图。这些视图由用户根据要求创建。UDV 没有分类,我已解释过如何创建它们。现在我们可以看看另一个视图创建。

CREATE VIEW DemoView
AS
SELECT EmpID, EmpName, Phone
FROM EmpInfFROM EmpInfo

何时使用视图

在许多情况下,我们会想创建自己的视图:

  1. 隐藏底层数据库架构的复杂性,或为一组用户定制数据和架构。
  2. 控制对数据行和列的访问。

视图创建选项

创建视图有两个不同的选项:

  • 架构绑定选项
  • 加密

架构绑定选项

如果使用 SCHEMABINDING 选项创建视图,它将锁定视图引用的表,并阻止所有可能更改表架构的更改(不允许 ALTER 命令)。创建架构绑定视图时,不能在查询中提及“Select * from tablename”。必须为引用提及所有列名。

例如

CREATE VIEW DemoSampleView
With SCHEMABINDING
As
SELECT
          EmpID,
          EmpName,
FROM DBO.EmpInfo

还有一件事需要记住,在指定数据库名称时,必须使用 Dbo.[DbName]。创建视图后,尝试修改 EmpInfo 表,我们将无法做到!这就是 SCHEMABINDING 选项的强大之处。

如果我们要更改/修改被架构绑定视图引用的表的定义,我们会收到以下错误消息:

SchemaBinding.jpg

加密

此选项加密视图定义。此选项会加密视图的定义。用户在视图创建后将无法看到视图的定义。这是视图的主要优点,我们可以使其安全。

CREATE VIEW DemoView
With ENCRYPTION.EmpInfo

注意:一旦视图被加密,就无法再次解密。

使用 SSMS 创建视图

SQL Server Management Studio 提供了一个方便的 GUI 来创建和管理视图。在对象资源管理器选项卡中,它列出了与数据库对应的所有视图。在本节中,我们将快速了解 SSMS 如何用于创建和维护视图。

首先展开 ViewDemoDB > 移动到视图。右键单击“视图”文件夹。

NewViewSSMS.jpg

当我们单击“新建视图”时,将出现以下屏幕。在 ViewDemoDB 中,我们有两个数据表。现在我将从 EmpInfo 表创建一个视图。

AddTableSSMS.jpg

选择 EmpInfo,然后单击“添加”。您将被重定向到“创建视图”屏幕,您可以在其中配置视图的创建。请查看以下图片:

NewViewCreate.jpg

上图显示了三个部分,我们可以在其中选择表名,或者在下面的部分中编写视图的查询。完成后,只需单击工具栏上的“保存”按钮。命名视图,然后单击“确定”。

ViewNameSSMS.jpg

现在转到 ViewDemoDB > 视图 > 展开“视图”文件夹。在这里,除了系统视图之外,您还可以看到我们刚刚创建的视图。

NewCreatedView.jpg

这就是我们的用户自定义视图。如果我们右键单击它,我们将获得“打开视图”的选项,它将显示视图的结果。

PropertiesView.jpg

我们还可以以与处理表相同的方式,从视图本身创建另一个视图。

摘要

视图是存储在数据库中的“虚拟表”对象。它可以作为数据库的安全容器。我们可以加密视图定义以使其安全。有 230 多个系统视图可用,它们都有自己的职责。我们可以通过编写 T-SQL 语句或使用 SQL Server Management Studio 来创建视图。

希望我解释得很清楚。请提供您的反馈和建议,以改进我的文章。

下一篇文章将要涵盖的主题

  • 参数化视图
  • 视图索引
  • 视图常见问题解答

参考和未来学习

关注点

我只发表过几篇关于 SQL Server 的文章,这是我经过很长时间后写的一篇。我在学习和探索视图的过程中学到了很多。

历史

  • 2009 年 7 月 27 日:首次发布。
© . All rights reserved.