sys.sql_modules (Transact-SQL)

适用于:yesSQL Server(所有受支持的版本)YesAzure SQL 数据库YesAzure SQL 托管实例yesAzure Synapse AnalyticsyesAnalytics Platform System (PDW)

返回SQL Server中SQL语言定义模块的每个对象的行,包括本机编译的标量用户定义函数。 类型为 P、RF、V、TR、FN、IF、TF 和 R 的对象均有关联的 SQL 模块。 在此视图中,独立的默认值,即 D 类型的对象也具有 SQL 模块定义。 有关这些类型的说明,请参阅 typesys.objects 目录视图中的列。

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

列名称 数据类型 说明
object_id int 包含对象的对象 ID。 在数据库中是唯一的。
definition nvarchar(max) 定义此模块的 SQL 文本。 也可以使用 OBJECT_DEFINITION 内置函数获取此值。

NULL = Encrypted。
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。

如果 EXECUTE AS SELF 或 EXECUTE AS <主体,则指定主体>的 ID。

-2 = EXECUTE AS OWNER。
uses_native_compilation bit 适用于:SQL Server 2014 (12.x) 到 2014 SQL Server 2014 (12.x) 。

0 = 非本机编译

1 = 本机编译

默认值为 0。
is_inlineable bit 适用于:SQL Server 2019 (15.x) 及更高版本。

指示模块是否可内联。 内联性基于 此处指定的条件。

0 = 不可内联

1 = 可内联。

对于标量用户定义函数 (UDF) ,如果 UDF 是可内联的,则值为 1;否则为 0。 它始终包含内联表值函数的值 1, (TVF) ,对于所有其他模块类型,它始终包含 0。
inline_type bit 适用于:SQL Server 2019 (15.x) 及更高版本。

指示当前是否为模块启用内联。

0 = 内联已关闭

1 = 内联已打开。

对于 UDF) (标量用户定义的函数,如果显式或隐式 () 启用内联,则该值将为 1。 对于 (TVF) 的内联表值函数,对于其他模块类型,该值始终为 1。

备注

sys.default_constraints目录视图中找到了 DEFAULT 约束的 SQL 表达式(类型为 D 的对象)。 在sys.check_constraints目录视图中找到 CHECK 约束的 CHECK 约束(类型为 C 的对象)的SQL表达式。

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(内存中优化)