SQL Server 中的视图

SQL Server 视图是包含来自引用表的列和行的虚拟表。本研究解释了如何创建、修改、重命名和删除视图。除非我们定义了索引,否则视图不会在数据库中存储一组值。因此,当您对视图使用 SELECT 语句时,记录将来自创建视图时引用的表。

您可以使用 SQL Server Transact 查询或 Management Studio 来创建或替换视图。在进入示例之前,您可以将它们用于以下目的:

  • 首先,根据用户的需求简化数据。
  • 限制用户访问整个数据库。

SQL Server 创建视图语句

此示例展示了如何使用 CREATE 语句创建视图。

CREATE VIEW EmployeesViewbyQuery
AS
SELECT  [FirstName] + ' ' + [LastName] AS Name
	,[Occupation]
	,[Education]
	,dept.DepartmentName AS Department
	,[YearlyIncome] AS Income
	,[Sales]
FROM [MyEmployees Table]
   INNER JOIN 
 	 Department AS dept ON
	    Dept.[id] = [MyEmployees Table].DeptID
GO

让我们看看行和列结果集。

SELECT * FROM [dbo].[EmployeesViewbyQuery]

在 SQL Server Management Studio 中创建视图

此示例显示了使用 Management Studio 创建视图的步骤。创建时记住的限制是:

  • 它只能在当前数据库中创建。
  • 它允许我们拥有最多 1024 列。

要查看现有视图,请选择拥有它们的数据库。正如您所见,我们的数据库没有。

右键单击 Management Studio 中的文件夹,它将打开上下文菜单。要创建它,请从中选择显示的选项。

Choose New option in SSMS 2

单击该选项后,查询设计器将在单独的弹出窗口中打开,以添加创建 SQL Server 视图所需的表。

您可以添加函数、表或视图。例如,从下图可以看出,我们选择了 MyEmployees 表和 Department 表。

选择所需的表后,它将显示 查询设计器。请通过在“图表窗格”中勾选列名来选择所需的列。

在此 SQL Server 视图示例中,我们从两个表中选择了名、姓、教育、职业、部门、年收入、销售额和入职日期。请记住,您可以通过将一列拖到另一列上来连接两个表。

Sort Type 属性用于应用 ORDER BY 功能。请在 Grid Pane 中将 Sort Type 更改为 Ascending(升序)或 Descending(降序)。在此示例中,我们将年收入按降序排序。选择 Descending 操作后,它将显示排序表示。

Create Views in SQL Server 8

我们设计的最终 SELECT 查询。

请尝试使用 Management Studio 执行我们设计的这个 SQL Server 视图查询,并查看结果。

SELECT  TOP (100) PERCENT dbo.[MyEmployees Table].FirstName, 
        dbo.[MyEmployees Table].LastName, 
        dbo.[MyEmployees Table].Education, 
        dbo.[MyEmployees Table].Occupation, 
        dbo.Department.DepartmentName, 
        dbo.[MyEmployees Table].YearlyIncome, 
        dbo.[MyEmployees Table].Sales, 
        dbo.[MyEmployees Table].HireDate
FROM dbo.Department
 INNER JOIN
     dbo.[MyEmployees Table] ON 
         dbo.Department.id = dbo.[MyEmployees Table].DeptID
ORDER BY dbo.[MyEmployees Table].YearlyIncome DESC

接下来,转到“文件”菜单并选择“保存”选项以保存设计的查询。

它将打开“选择名称”弹出窗口以更改默认名称。

Choose a Name for View

展开文件夹,查看创建的视图,然后展开它以查看列名。

注意:一些客户端只授予对视图的访问权限,不允许您访问其主数据库。

在 SQL Server 中重命名视图

它允许您使用内置的存储过程 sp_rename 或 management studio 来重命名视图。

使用 Management Studio 重命名视图

此示例使用 SSMS 重命名视图。要重命名它,请导航到要修改的视图。右键单击名称,然后选择“重命名”选项。

Rename View in management Studio

单击“重命名”选项后,SSMS 将允许我们重命名它们。

Rename Views in SQL Server management Studio 16

使用 SP_RENAME 重命名视图

我们可以使用 sp_rename 存储过程来重命名视图。sp_rename 的语法是:

SP_RENAME Old_Name, New_Name

使用 sp_rename 存储过程,您可以重命名现有的视图。为此,请单击“新建查询”并返回以下查询。

SP_RENAME EmployeesViewbyStudio, EmployeesVwName

修改 SQL Server 中的视图

以下示例可帮助您了解修改视图涉及的步骤。但首先,让我们看一下要遵循的限制或约束:

  • 依赖对象,例如 触发器存储过程 不会受到修改的影响。
  • 您可以对有索引的视图使用 ALTER 语句,因为它会无条件删除所有索引。

在 SSMS 中修改视图

要在 Management Studio 中修改,请导航到要更改的视图。接下来,右键单击它并选择“设计”选项。

它会打开一个新的设计查询窗口,其中包含现有表和关系。在这里,我们使用过滤器(WHERE 子句)来限制职业为“Professional”的员工,并在 ORDER BY 子句 中使用两个列。

Modify Views 19

我将从下方选择所有记录以显示修改后的记录。

SELECT [FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[DepartmentName]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [dbo].[EmployeesViewbySQLSMS]

用于修改的 ALTER VIEW 语句

SQL Server ALTER VIEW 语句是修改现有视图的理想方法。为此,请单击新建查询并写入以下查询。

ALTER VIEW [dbo].[EmployeesViewbySQLSMS]
AS
SELECT TOP 10 emp.FirstName, 
          emp.LastName, 
   emp.Education, 
   emp.Occupation, 
   Dept.DepartmentName, 
          emp.YearlyIncome, 
   emp.Sales
FROM  dbo.Department AS Dept
   INNER JOIN
      dbo.[MyEmployees Table] AS emp ON 
        Dept.id = emp.DeptID
ORDER BY emp.YearlyIncome DESC, 
         emp.Sales DESC

让我们看看输出。

SELECT [FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[DepartmentName]
      ,[YearlyIncome]
      ,[Sales]
  FROM [EmployeesViewbySQLSMS]
Modify Views 21

如何查找视图的定义?

使用 sp_helptext 存储过程来获取视图的定义。

SP_HELPTEXT [EmployeesViewbyQuery]
SP_HELPTEXT to Find Definition 22

删除视图

以下示例展示了如何删除视图。

  • 删除或丢弃表不会删除依赖项,因此您必须显式使用 SQL Server DROP VIEW 语句来删除它。
  • 当您删除它时,所有信息(包括定义)将从系统目录中删除。

使用 Management Studio 删除视图

要使用 Management Studio 进行删除,请右键单击视图名称,然后单击“删除”选项。在本演示中,我们要删除下面的视图。

Delete View from Management Studio 23

选择删除选项将打开“删除对象”窗口。接下来,单击“显示依赖项”按钮检查依赖项,然后单击“确定”进行删除。

Delete the View Object 24

使用查询删除或丢弃视图

我将使用 DROP 语句删除视图。使用 IF OBJECT_ID (N’VwName’, ‘V’) IS NOT NULL 检查其是否存在于数据库中是一种良好的做法。

DROP VIEW [dbo].[EmployeesVwbyQuery]
GO

评论已关闭。