sys.sql_modules (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统 (PDW)Microsoft Fabric 中的 SQL 分析端点Microsoft Fabric 中的仓库

为 SQL Server 中 SQL 语言定义的模块的每个对象返回一行,包括本机编译的标量用户定义函数。 类型P、、、VTRFN、、IF、以及TFR具有关联的 SQL 模块RF的对象。 独立默认值(类型 D对象)也在此视图中具有 SQL 模块定义。 有关这些类型的说明,请参阅 type 目录视图中的 列。

有关详细信息,请参阅内存中 OLTP 的标量用户定义函数

Column name Data type Description
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。

NULL 默认情况下或如果 EXECUTE AS CALLER
指定主体的 ID(如果 EXECUTE AS SELF 为或 EXECUTE AS <principal>)。
-2 = EXECUTE AS OWNER
uses_native_compilation bit 0 = 未本机编译
1 = 本机编译

默认值是 0

适用于:SQL Server 2014 (12.x) 及更高版本。
is_inlineable bit 指示模块是否可以内联。 内联性基于 要求中指定的条件。

0 = 无法内联
1 = 可以内联。

对于标量用户定义函数(UDF),该值是 1 可以内联 UDF, 0 否则为值。 它始终包含内联表值函数(TVF)和0所有其他模块类型的值1

适用于:SQL Server 2019 (15.x) 及更高版本。
inline_type bit 指示当前是否为模块启用内联。
0 = 关闭内联
1 = 启用内联。
对于标量用户定义函数(UDF),该值是 1 启用内联(显式或隐式)。 该值始终 1 用于内联表值函数(TVF)和其他 0 模块类型。

适用于:SQL Server 2019 (15.x) 及更高版本。

Remarks

约束的 SQL 表达式 DEFAULT (类型 D对象)位于 sys.default_constraints 目录视图中。 约束的 SQL 表达式 CHECK (类型 C对象)位于 sys.check_constraints 目录视图中。

sys.dm_db_uncontained_entities中还介绍了此信息。

重命名存储过程、函数、视图或触发器不会更改目录视图的定义列中 sys.sql_modules 相应对象的名称或 由OBJECT_DEFINITION 内置函数返回的定义。 因此,建议不要用于 sp_rename 重命名这些对象类型。 请删除并重新创建具有新名称的对象。 在 sp_rename中了解详细信息。

Permissions

目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration

Examples

下面的示例返回当前数据库中每个模块的 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
     INNER JOIN sys.objects AS o
         ON sm.object_id = o.object_id
     INNER JOIN sys.schemas AS ss
         ON o.schema_id = ss.schema_id
ORDER BY o.[type], ss.[name], o.[name];