代码之家  ›  专栏  ›  技术社区  ›  Chicken Sandwich No Pickles

SQL Server系统视图定义

  •  0
  • Chicken Sandwich No Pickles  · 技术社区  · 6 年前

    是否有方法查看SSMS中的系统视图定义?我不明白使用sqlservermanagementstudio是如何做到这一点的。

    [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];
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Aaron Bertrand    6 年前

    他们认为从对象资源管理器中的系统/目录视图的上下文菜单中删除脚本选项是有用的,这在我看来确实很奇怪,但是他们保留了 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 DAC connection ,或者根本不在SQL Server中(请考虑 xp_cmdshell ).

    为了查看过程的完整定义,您需要将results to text(results to grid将整个正文放在一行上),可能需要将默认的results to text输出更改为最多8192个字符,如果这还不够,则切换回grid并 convert to XML .

    sp_helptext ,但这并不总是有效;而且,它的输出也不稳定。