OBJECT_DEFINITION (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

返回指定对象定义的 Transact-SQL 源文本。

Transact-SQL 语法约定

语法

OBJECT_DEFINITION ( object_id )  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

object_id
要使用的对象的 ID。 object_id 的数据类型为 int,并假定表示当前数据库上下文中的对象

返回类型

nvarchar(max)

例外

出现错误时或调用方没有查看对象的权限时,将返回 NULL。

用户只能查看符合如下条件的安全对象的元数据:该安全对象为该用户所有,或已授予该用户对该安全对象的权限。 这意味着,如果用户对对象没有任何权限,则元数据生成的内置函数(如 OBJECT_DEFINITION)可能返回 NULL。 有关详细信息,请参阅 Metadata Visibility Configuration

注解

SQL Server 数据库引擎假定 object_id 位于当前数据库上下文中。 对象定义的排序规则始终与调用数据库上下文的排序规则匹配。

OBJECT_DEFINITION 适用于以下对象类型:

  • C = 检查约束

  • D = 默认值(约束或独立)

  • P = SQL 存储过程

  • FN = SQL 标量函数

  • R = 规则

  • RF = 复制筛选器过程

  • TR = SQL 触发器(架构范围内的 DML 触发器,或数据库或服务器范围内的 DDL 触发器)

  • IF = SQL 内联表值函数

  • TF = SQL 表值函数

  • V = 视图

权限

系统对象定义对所有用户可见。 用户对象的定义对于对象所有者或具有下列任一权限的被授权者可见:ALTER、CONTROL、TAKE OWNERSHIP 或 VIEW DEFINITION。 db_ownerdb_ddladmindb_securityadmin 固定数据库角色的成员隐式具有这些权限。

示例

A. 返回用户定义对象的源文本

以下示例返回 uAddress 架构中的用户定义触发器 Person 的定义。 内置函数 OBJECT_ID 用于将触发器的对象 ID 返回到 OBJECT_DEFINITION 语句。

USE AdventureWorks2022;  
GO  
SELECT OBJECT_DEFINITION (OBJECT_ID(N'Person.uAddress')) AS [Trigger Definition];   
GO  

B. 返回系统对象的源文本

以下示例返回系统存储过程 sys.sp_columns 的定义。

USE AdventureWorks2022;  
GO  
SELECT OBJECT_DEFINITION (OBJECT_ID(N'sys.sp_columns')) AS [Object Definition];  
GO  

另请参阅

元数据函数 (Transact-SQL)
OBJECT_NAME (Transact-SQL)
OBJECT_ID (Transact-SQL)
sp_helptext (Transact-SQL)
sys.sql_modules (Transact-SQL)
sys.server_sql_modules (Transact-SQL)