SQL 服务器系统视图定义

SQL Server System View Definitions

有没有办法在 SSMS 中查看系统视图定义?我不知道如何使用 SQL Server Management Studio 实现这一点。

我想看的视图定义示例:[sys].[all_sql_modules].

谢谢

编辑:

第一个查询运行良好,但是我想看到的视图没有出现在这个查询中。

select top 100000
    object_definition(a.[object_id]) as [object_definition_results],
    b.[name] as [object_name],
    b.[type],
    case
        when b.[type] = 'P'  then 'SQL Stored Procedure'
        when b.[type] = 'RF' then 'Replication-filter-procedure'
        when b.[type] = 'V'  then 'View'
        when b.[type] = 'TR' then 'SQL DML Trigger'
        when b.[type] = 'FN' then 'SQL Scalar Function'
        when b.[type] = 'IF' then 'SQL inline table-valued function'
        when b.[type] = 'TF' then 'SQL Table-Valued Function'
        when b.[type] = 'R'  then 'Rule (old-style, stand-alone)'
        else ''
        end as [Object Type Description]
from
    [sys].[sql_modules] as a
inner join
    [sys].[objects] as b
    on
        a.[object_id] = b.[object_id]
order by
    [Object Type Description];

我也试过这个,但似乎那个视图甚至不在对象列表中。为什么会这样?

select top 10000
    a.*
from
    [sys].[objects] as a
where
    a.[name] like '%sql%module%'
order by
    a.[name];

我觉得很奇怪,他们认为从对象资源管理器中系统/目录视图的上下文菜单中删除脚本选项很有用,但他们保留了 Edit Top 200 Rows 的选项。我认为有人落后了。

在很多情况下,您可以通过以下两种方式之一获得它:

SELECT OBJECT_DEFINITION(OBJECT_ID(N'sys.all_sql_modules'));

SELECT definition FROM sys.all_sql_modules
  WHERE [object_id] = OBJECT_ID(N'sys.all_sql_modules');

有时,系统对象的定义不在 master 中(而是在 resource database), can only be viewed using the DAC connection 中,或者根本不在 SQL 服务器中(想想 xp_cmdshell ).

为了查看过程的完整定义,您需要将结果转为文本(结果转为网格会将整个正文放在一行中),可能至少需要将默认结果更改为文本输出到最大 8192 个字符,如果这还不够,切换回网格和 convert to XML.

肯定有人会建议 sp_helptext,但这并不总是有效;另外,它的输出很不稳定。