sys.sql_modules (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
为 SQL Server 中 SQL 语言定义的模块的每个对象返回一行,包括本机编译的标量用户定义函数。 类型为 P、RF、V、TR、FN、IF、TF 和 R 的对象均有关联的 SQL 模块。 独立默认值(类型为 D 的对象)也在此视图中具有 SQL 模块定义。 有关这些类型的说明,请参阅 sys.objects 目录视图中的 type
列。
有关详细信息,请参阅内存中 OLTP 的标量用户定义函数。
列名称 | 数据类型 | 说明 |
---|---|---|
object_id | int | 包含对象的对象 ID。 在数据库中是唯一的。 |
definition | nvarchar(max) | 定义此模块的 SQL 文本。 也可以使用 OBJECT_DEFINITION 内置函数获取此值。 NULL = 已加密。 |
uses_ansi_nulls | bit | 模块是使用 SET ANSI_NULLS ON 创建的。 对于规则和默认值,始终 = 0。 |
uses_quoted_identifier | bit | 模块是使用 SET QUOTED_IDENTIFIER ON 创建的。 |
is_schema_bound | bit | 模块是使用 SCHEMABINDING 选项创建的。 对于本机编译存储过程,始终包含值 1。 |
uses_database_collation | bit | 1 = 架构绑定模块定义取决于正确处理所需的数据库的默认排序规则;否则为 0。 此类依赖关系可防止更改数据库的默认排序规则。 |
is_recompiled | bit | 过程是使用 WITH RECOMPILE 选项创建的。 |
null_on_null_input | bit | 模块被声明为针对任何 NULL 输入生成 NULL 输出。 |
execute_as_principal_id | Int | EXECUTE AS 数据库主体的 ID。 默认情况下,或者 EXECUTE AS CALLER 时,为 NULL 。如果为 EXECUTE AS SELF 或 EXECUTE AS <主体>,则为指定主体的 ID。 -2 = EXECUTE AS OWNER。 |
uses_native_compilation | bit | 适用于:SQL Server 2014 (12.x) 到 SQL Server 2014 (12.x)。 0 = 非本机编译 1 = 本机编译 默认值为 0。 |
is_inlineable | bit | 适用于:SQL Server 2019 (15.x) 及更高版本。 指示模块是否可内联。 内联性基于此处指定的条件。 0 = 不可内联 1 = 可内联。 对于标量用户定义函数 (UDF),如果 UDF 可内联,则值为 1,否则为 0。 对于内联表值函数 (TVF),它始终包含值 1;对于所有其他模块类型,始终包含 0。 |
inline_type | bit | 适用于:SQL Server 2019 (15.x) 及更高版本。 指示当前是否为模块启用内联。 0 = 关闭内联 1 = 启用内联。 对于标量用户定义函数 (UDF),如果启用内联(显式或隐式),则值为 1。 对于内联表值函数 (TVF),该值始终为 1;对于其他模块类型,该值始终为 0。 |
备注
DEFAULT 约束(即 D 类型对象)的 SQL 表达式位于 sys.default_constraints 目录视图中。 CHECK 约束即 C 类型对象的 SQL 表达式位于 sys.check_constraints 目录视图中。
sys.dm_db_uncontained_entities (Transact-SQL) 中也介绍了此信息。
无论是 sys.sql_modules
目录视图的定义列中的相应对象,还是由 OBJECT_DEFINITION 内置函数返回的定义,重命名存储过程、函数、视图或触发器都不会更改其名称(如有)。 因此,我们建议不要使用 sp_rename
重命名这些对象类型。 而是删除对象,然后使用新名称重新创建该对象。 有关详细信息,请参阅 sp_rename (Transact-SQL)。
权限
目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration。
示例
下面的示例返回当前数据库中每个模块的 object_id、架构名称、对象名称、对象类型及定义。
SELECT
sm.object_id
, ss.[name] as [schema]
, o.[name] as object_name
, o.[type]
, o.[type_desc]
, sm.[definition]
FROM sys.sql_modules AS sm
JOIN sys.objects AS o
ON sm.object_id = o.object_id
JOIN sys.schemas AS ss
ON o.schema_id = ss.schema_id
ORDER BY
o.[type]
, ss.[name]
, o.[name];
另请参阅
目录视图 (Transact-SQL)
对象目录视图 (Transact-SQL)
查询 SQL Server 系统目录常见问题
内存中 OLTP(内存中优化)