获取有关视图的信息

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

可以使用 SQL Server Management Studio 或 Transact-SQL 获取有关 SQL Server 中视图定义或属性的信息。 您可能需要查看视图定义以了解数据从源表中的提取方式,或查看视图所定义的数据。

重要

如果更改视图所引用对象的名称,则必须更改视图,使其文本反映新的名称。 因此,在重命名对象之前,首先显示该对象的依赖关系,以确定即将发生的更改是否会影响任何视图。

本主题内容

开始之前

安全性

权限

使用 sp_helptext 返回视图的定义需要 public 角色的成员身份。 使用 sys.sql_expression_dependencies 查找视图的所有依赖关系需要对该数据库的 VIEW DEFINITION 权限以及对数据库的 sys.sql_expression_dependencies 的 SELECT 权限。 系统对象定义(如 SELECT OBJECT_DEFINITION 中返回的对象定义)是公开可见的。

使用 SQL Server Management Studio

使用对象资源管理器获取视图属性

  1. “对象资源管理器”中,选择包含要查看属性的视图的数据库旁边的加号,然后单击加号以展开 “视图” 文件夹。

  2. 右键单击要查看其属性的视图,然后选择“属性”

    “视图属性” 对话框中显示以下属性:

    Database
    包含此视图的数据库的名称。

    服务器
    当前服务器实例的名称。

    用户
    此连接的用户名。

    创建日期
    显示视图的创建日期。

    Name
    当前视图的名称。

    架构
    显示视图所属的架构。

    系统对象
    指示视图是否为系统对象。 值为 True 和 False。

    ANSI NULLs
    指示创建对象时是否选择了 ANSI NULLs 选项。

    已加密
    指示视图是否已加密。 值为 True 和 False。

    带引号的标识符
    指示创建对象时是否选择了“带引号的标识符”选项。

    架构已绑定
    指示视图是否绑定到架构。 值为 True 和 False。 有关绑定到架构的视图的信息,请参阅 CREATE VIEW (Transact-SQL) 的 SCHEMABINDING 部分。

使用视图设计器工具获取视图属性

  1. “对象资源管理器”中,展开包含要查看属性的视图的数据库,然后展开 “视图” 文件夹。

  2. 右键单击要查看其属性的视图,然后选择“设计”

  3. 右键单击“关系图”窗格中的空白区域,再选择“属性”

    “属性” 窗格中显示以下属性:

    (名称)
    当前视图的名称。

    Database Name
    包含此视图的数据库的名称。

    描述
    对当前视图的简短说明。

    架构
    显示视图所属的架构。

    服务器名称
    当前服务器实例的名称。

    绑定到架构
    防止用户以会使视图定义失效的任何方式修改影响此视图的基础对象。

    具有确定性
    显示是否可以明确地确定所选列的数据类型。

    非重复值
    指定查询将在视图中筛选出重复值。 当只使用表中的部分列并且这些列可能包含重复值时,或者当联接两个或更多表的过程会在结果集中产生重复行时,此选项非常有用。 选择该选项等效于向 SQL 窗格内的语句中插入关键字 DISTINCT。

    GROUP BY 扩展
    指定对于基于聚合查询的视图,附加选项可用。

    输出所有列
    显示所有列是否都由所选视图返回。 这是在创建视图时设置的。

    SQL 注释
    显示 SQL 语句的说明。 若要查看或编辑完整的说明,请选择相应的说明,再选择属性右侧的省略号 (…)。 您的注释可以包含视图使用者和使用时间等信息。

    Top 规范
    展开此项可显示“Top”、“表达式”、“百分比”和“等同值”属性的属性。

    (最前面)
    指定视图将包括 TOP 子句,该子句只返回结果集中的前 n 行或前百分之 n 行。 默认情况下,视图将在结果集中返回前 10 行。 使用此项可更改返回的行数或指定不同的百分比

    表达式
    显示视图将返回的百分比(如果“百分比”设置为“是”)或记录(如果“百分比”设置为“否”)。

    百分比
    指定查询将包含一个 TOP 子句,仅返回结果集中前百分之 n 行

    With Ties
    指定视图将包括 WITH TIES 子句。 如果视图包含WITH TIES 子句和基于百分比的 WITH TIES 子句, WITH TIES 将非常有用。 如果设置了该选项,并且百分比截止位置在一组行的中间,且这些行在 ORDER BY 子句中具有相同的值,则视图将会扩展,以包含所有这样的行。

    更新规范
    展开此项可显示“使用视图规则更新”和“Check 选项”属性。

    (使用视图规则更新)
    指示对视图的所有更新和插入将由 Microsoft 数据访问组件 (MDAC) 转换为引用视图的 SQL 语句,而非转换为直接引用视图的基表的 SQL 语句。

    在某些情况下,MDAC 将视图更新和视图插入操作表示为针对视图的基本基表的更新和插入。 通过选择 “使用视图规则更新”,您可以确保 MDAC 针对视图本身生成更新和插入操作。

    Check 选项
    指示当打开此视图并修改“结果”窗格时,数据源检查添加或修改的数据是否满足视图定义的 WHERE 子句的要求。 如果你的修改不满足 WHERE 子句的要求,将看到一个包含详细信息的错误

获取视图的依赖关系

  1. “对象资源管理器”中,展开包含要查看属性的视图的数据库,然后展开 “视图” 文件夹。

  2. 右键单击要查看其属性的视图,然后选择“查看依赖关系”

  3. 选择“依赖于 [视图名称] 的对象”可以显示引用该视图的对象。

  4. 选择“[视图名称] 依赖的对象”可以显示由该视图引用的对象。

“使用 Transact-SQL”

获取视图的定义和属性

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例之一复制并粘贴到查询窗口中,然后选择“执行”

    USE AdventureWorks2022;  
    GO  
    SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound  
    FROM sys.sql_modules  
    WHERE object_id = OBJECT_ID('HumanResources.vEmployee');   
    GO  
    
    USE AdventureWorks2022;   
    GO  
    SELECT OBJECT_DEFINITION (OBJECT_ID('HumanResources.vEmployee')) AS ObjectDefinition;   
    GO  
    
    EXEC sp_helptext 'HumanResources.vEmployee';  
    

有关更多信息,请参阅 sys.sql_modules (Transact-SQL)OBJECT_DEFINITION (Transact-SQL)sp_helptext (Transact-SQL)

注意

Azure Synapse Analytics 不支持系统存储过程 sp_helptext。 而是改用 sys.sql_modules 对象目录视图。

获取视图的依赖关系

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。

    USE AdventureWorks2022;  
    GO  
    SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
        o.type_desc AS referencing_desciption,   
        COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
        referencing_class_desc, referenced_class_desc,  
        referenced_server_name, referenced_database_name, referenced_schema_name,  
        referenced_entity_name,   
        COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
        is_caller_dependent, is_ambiguous  
    FROM sys.sql_expression_dependencies AS sed  
    INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
    WHERE referencing_id = OBJECT_ID(N'Production.vProductAndDescription');  
    GO  
    

有关更多信息,请参阅 sys.sql_expression_dependencies (Transact-SQL)sys.objects (Transact-SQL)