SQL Server 2005 视图概述






4.86/5 (49投票s)
视图概述、系统视图、视图创建、以及视图的绑定和安全。
目录
引言
在本文中,我将介绍 SQL Server 2005 中的视图。这是一个比较简单的主题。我希望这篇文章能像我的 ASP.NET 文章一样对您有所帮助。请给我您宝贵的建议和反馈,以改进我的文章。
什么是视图
视图是“虚拟表”。它不像普通表那样包含数据,而是一个虚拟表,其中包含来自一个或多个不同表中的列和数据。视图本身不包含任何数据,它是一组存储在数据库中的、作为对象存在的查询,这些查询应用于一个或多个表。在从一个或多个表创建视图后,它被用作这些表的引用,执行时,它只显示在创建视图期间的查询中指定的数据。
在上面的图示中,我们从 Table1 和 Table2 创建了一个视图(View_Table1_Table2
)。因此,View_Table1_Table2
将只显示那些列中的信息。让我们来看看创建视图的基本语法。
CREATE VIEW [View Name]
AS
[SELECT Statement]
视图的用途
视图用作数据库中的安全机制。因为它可以限制用户查看某些列和行。视图只显示查询中指定的数据,因此它只显示在创建视图时定义的查询返回的数据。其余数据对最终用户完全不可见。
除了安全性,视图的另一个优点是数据抽象,因为最终用户并不了解表中的所有数据。
视图的通用语法
在本节中,我将介绍如何创建视图、从视图中选择数据以及删除视图。我创建了一个名为 ViewDemo 的数据库。它有一个名为 EmpInfo 的表,如下所示:
其中包含以下数据:
我描述的所有示例都来自这个数据库。
创建视图
以下是创建视图的通用语法:
CREATE VIEW [View_Name]
AS
[SELECT Statement]
例如
CREATE VIEW SampleView
As
SELECT EmpID, EmpName FROM EmpInfo
这将创建一个名为 SampleView
的视图,该视图将只包含 EmpID 和 EMPName。
从视图获取结果
这类似于 Select
语句。
select * from SampleView
现在来看一下 SampleView
的输出:
删除视图
DROP VIEW SampleView
现在,如果我们想从 SampleView
中选择数据,我们会收到以下错误:
视图的不同类型
视图有两种不同类型:
- 系统视图
- 信息架构视图
- 目录视图
- 动态管理视图 (DMV)
- 用户自定义视图
- 简单视图
- 复杂视图
现在,我们将看一下 SQL Server 2005 中不同类型的视图。
系统视图
在 SQL Server 中,有几个系统数据库,如 Master、Temp、msdb 和 tempdb。每个数据库都有自己的职责,例如 Master 数据是 SQL Server 2005 中创建的所有数据库的模板数据库之一。同样,系统视图是 Microsoft 创建的预定义视图,已存在于 Master 数据库中。它们也用作所有新数据库的模板视图。这些系统视图将自动插入任何用户创建的数据库中。大约有 230 个系统视图可用。
我们可以从 SQL Server Management Studio 中探索系统视图。展开任何数据库 > 视图 > 系统视图。
在 SQL Server 中,所有系统视图都分为不同的架构。这些用于 SQL Server 数据库的安全容器。我们可以按以下方式对系统视图进行分类:
信息架构视图
目录视图
动态管理视图 (DMV)
现在,以上所有类别本身都是庞大的主题,所以我不会详细介绍它们。让我们概述一下这些视图类型。
信息视图
这些是最重要的系统分组视图之一。此组中有二十个不同的架构视图。它们用于显示数据库的大部分物理信息,例如表和列。此类型视图的命名约定是 INFORMATION_SCHEMA.[View Name]。从系统视图图像中,我们可以获得一些信息架构视图的名称。
让我们通过一个例子来看看。
我创建了一个名为 ViewDemo
的数据库。它有一个名为 EmpInfo 的表,下图显示了表的结构。
现在,如果我们想使用视图了解 Empinfo 表的列的详细信息,我们需要运行以下查询:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
Where TABLE_NAME='EmpInfo'
以下将是输出:
同样,我们可以使用其他架构视图来读取数据库信息。
目录视图
此类型的视图在 SQL Server 2005 中引入。目录视图也分为不同的组。它们用于显示数据库的自我描述信息。
例如
select * from sys.tables
以下是示例输出:
动态管理视图
这是 SQL Server 2005 中新引入的。这些视图为数据库管理员提供了有关 SQL Server 计算机当前状态的信息。这些值有助于管理员诊断问题并优化服务器以获得最佳性能。在 SQL Server 2005 中,有两种类型的 DMV:
- 服务器范围的 DMV:存储在 Master 数据库中。
- 数据库范围的 DMV:特定于每个数据库。
例如,如果我们想检查所有 SQL Server 连接,我们可以使用以下查询:
SELECT
connection_id,
session_id,client_net_address,
auth_scheme
FROM sys.dm_exec_connections
以下是示例输出:
如果您想了解 DMV 的详细信息,这里有一篇关于 CodeProject 的完整文章:动态管理视图 [DMV] - SQL Server 2005 功能 [^]。
注意:系统视图有很多东西可以学习,我只是为初学者介绍了它们。如果有人对此更感兴趣,请参考这篇文章:SQL Server 2005 系统表和视图 [^]。
用户自定义视图
到目前为止,我介绍了系统视图,现在我们将看一下用户自定义视图。这些视图由用户根据要求创建。UDV 没有分类,我已解释过如何创建它们。现在我们可以看看另一个视图创建。
CREATE VIEW DemoView
AS
SELECT EmpID, EmpName, Phone
FROM EmpInfFROM EmpInfo
何时使用视图
在许多情况下,我们会想创建自己的视图:
- 隐藏底层数据库架构的复杂性,或为一组用户定制数据和架构。
- 控制对数据行和列的访问。
视图创建选项
创建视图有两个不同的选项:
- 架构绑定选项
- 加密
架构绑定选项
如果使用 SCHEMABINDING
选项创建视图,它将锁定视图引用的表,并阻止所有可能更改表架构的更改(不允许 ALTER 命令)。创建架构绑定视图时,不能在查询中提及“Select * from tablename
”。必须为引用提及所有列名。
例如
CREATE VIEW DemoSampleView
With SCHEMABINDING
As
SELECT
EmpID,
EmpName,
FROM DBO.EmpInfo
还有一件事需要记住,在指定数据库名称时,必须使用 Dbo.[DbName]
。创建视图后,尝试修改 EmpInfo 表,我们将无法做到!这就是 SCHEMABINDING
选项的强大之处。
如果我们要更改/修改被架构绑定视图引用的表的定义,我们会收到以下错误消息:
加密
此选项加密视图定义。此选项会加密视图的定义。用户在视图创建后将无法看到视图的定义。这是视图的主要优点,我们可以使其安全。
CREATE VIEW DemoView
With ENCRYPTION.EmpInfo
注意:一旦视图被加密,就无法再次解密。
使用 SSMS 创建视图
SQL Server Management Studio 提供了一个方便的 GUI 来创建和管理视图。在对象资源管理器选项卡中,它列出了与数据库对应的所有视图。在本节中,我们将快速了解 SSMS 如何用于创建和维护视图。
首先展开 ViewDemoDB > 移动到视图。右键单击“视图”文件夹。
当我们单击“新建视图”时,将出现以下屏幕。在 ViewDemoDB 中,我们有两个数据表。现在我将从 EmpInfo 表创建一个视图。
选择 EmpInfo,然后单击“添加”。您将被重定向到“创建视图”屏幕,您可以在其中配置视图的创建。请查看以下图片:
上图显示了三个部分,我们可以在其中选择表名,或者在下面的部分中编写视图的查询。完成后,只需单击工具栏上的“保存”按钮。命名视图,然后单击“确定”。
现在转到 ViewDemoDB > 视图 > 展开“视图”文件夹。在这里,除了系统视图之外,您还可以看到我们刚刚创建的视图。
这就是我们的用户自定义视图。如果我们右键单击它,我们将获得“打开视图”的选项,它将显示视图的结果。
我们还可以以与处理表相同的方式,从视图本身创建另一个视图。
摘要
视图是存储在数据库中的“虚拟表”对象。它可以作为数据库的安全容器。我们可以加密视图定义以使其安全。有 230 多个系统视图可用,它们都有自己的职责。我们可以通过编写 T-SQL 语句或使用 SQL Server Management Studio 来创建视图。
希望我解释得很清楚。请提供您的反馈和建议,以改进我的文章。
下一篇文章将要涵盖的主题
- 参数化视图
- 视图索引
- 视图常见问题解答
参考和未来学习
关注点
我只发表过几篇关于 SQL Server 的文章,这是我经过很长时间后写的一篇。我在学习和探索视图的过程中学到了很多。
历史
- 2009 年 7 月 27 日:首次发布。