查看对象定义

查看数据库对象的 Transact-SQL 源代码的规则比查看元数据的规则更加严格。若要查看对象的 Transact-SQL 定义,用户必须拥有对象,或已授予有关对象的下列权限之一:

  • CONTROL

  • ALTER

  • TAKE OWNERSHIP

  • VIEW DEFINITION

下面是如何使用这些规则的一些示例:

  • 如果授予用户对表 myTable 的 ALTER 权限,则该用户可以查看与下表中列出的每个目录视图内 definition 列中的表相关的子组件的 Transact-SQL 定义。如果用户不具有上述权限之一或不拥有对象,则目录视图的 definition 列中的 Transact-SQL 定义为 NULL。

  • 如果用户不是 myTable 表的所有者,并且仅被授予对表的 SELECT 权限,则当用户访问下列目录视图时,definition 列为 NULL。

    目录视图名称

    Transact-SQL 定义的适用范围

    sys.sql_modules

    mytable 中的所有触发器

    sys.computed_columns

    myTable 中的所有计算列

    sys.check_constraints

    myTable 中的所有 CHECK 约束

    sys.default_constraints

    myTable 中的所有 DEFAULT 约束

  • 假设授予用户对过程 myProcedure 的 EXECUTE 权限。当用户尝试通过访问 sys.sql_modules 目录视图查看过程的 Transact-SQL 定义时,definition 列具有空值。相反,如果授予用户对 myProcedure 的 TAKE OWNERSHIP 权限,则用户将查看 sys.sql_modulesdefinition 列中过程的 Transact-SQL 定义。