【问题标题】:System Views text in SQL Server 2005SQL Server 2005 中的系统视图文本
【发布时间】:2009-01-11 07:25:34
【问题描述】:

我正在寻找使用对象资源管理器或使用 sp_helptext 查看 SQL Server 2005 中系统视图和过程的文本。

实际上我来自 SQL Server 2000 背景,我们有直接使用 SQL Server 2000 企业管理器检索视图代码和存储过程的功能,但我仍然无法在 SQL 中找到此功能Server 2005 Management Studio 并且仍在寻找相同的功能来获取 SQL Server 2005 中的视图和过程文本。

请帮帮我。

【问题讨论】:

    标签: sql-server-2005 views system


    【解决方案1】:

    您是否有权访问 SQL Server Management Studio?现在是 sys.sp_helptext 并且可以在 master --> Programmability --> Stored Procedures --> System Stored Procedures 在对象浏览器中浏览并使用

    exec sys.sp_helptext ObjectName
    

    您要查找的所有信息都可以在syscomments 表中找到,该表存储了所有视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的定义。 SQL 定义语句存储在“文本”列中。

    select text from syscomments  where id =
    OBJECT_id('objectname')
    order by colid
    

    【讨论】:

    • 感谢您的 cmets,我再次在视图的情况下问您同样的问题,请让我知道如何在 SQL Server 2005 中获取视图文本。在这里我再次寻找SQL Server 2005 主数据库中存在的系统视图的文本。
    • 相同的查询将用于视图、过程、函数等,例如从 master..syscmets 中选择文本,其中 id = object_id('information_schema.columns')
    • 但是朋友,这就像使用 SQL Server 2000 中的查询分析器和 sp_helptext 命令,但是如何使用 SQL Server 2005 企业管理器来实现相同的事情,因为我们可以轻松地为视图做到这一点在 SQL Server 2000 企业管理器中,希望我清楚这一点并感谢您的查询
    • 我明白你的意思了,我只是尝试右键单击并编写系统视图脚本。抱歉,我没有提供更多帮助。如果我发现任何进一步的东西,我会分享。
    【解决方案2】:

    This Stackoverflow posting 有一个数据库逆向工程脚本(除其他外)逆向工程师查看定义。来自脚本

    -- This generates view definitions 
    --
    select definition + char(10) + 'go' + char(10)
      from sys.sql_modules c
      join sys.objects o
        on c.object_id = o.object_id
      join #views o2
        on o.object_id = o2.object_id
    

    请注意,#views 在脚本的前面填充了要转储的视图列表。为特定架构选择(也从脚本中)

    select o.name
          ,o.object_id
      into #views
      from sys.objects o
      join sys.schemas s
        on s.schema_id = o.schema_id
     where o.type in  ('V')
       and s.name = @schema
    

    要获取存储过程,请替换为“P”;获取函数替换 'FN' 或 'TF'

    master 数据库中,系统存储过程的定义位于sys.system_views、'sys.system_objects, 'sys.system_columnssys.system_sql_modules。逆向工程脚本中的查询可以很容易地通过使用这些表来获得系统项的定义。

    【讨论】:

    • syscmets 中的信息是否不稳定,不宜仅检索定义?
    • 可能不会,但 syscmets 是 SQL2000 的向后兼容功能,可能会或可能不会无限期地持续下去(实际上它可能会存在一段时间)。此外,OP 似乎遵循系统存储过程和视图的定义,它们位于不同的表集中。
    • 不应使用 Syscmets,因为它只显示 8000 字节的源文本块。然后你必须将它们串在一起或做其他事情来智能地处理这些块。
    • @ErikE - 使用递归 CTE 连接来自 syscmets 的块相当简单
    • @ConcernedOfTunbridgeWells 当然!但是如果你可以使用sys.system_sql_modules,你为什么要这样做呢?
    【解决方案3】:

    如果您只想查看定义过程的文本:

    右键单击存储过程,然后选择修改。这将显示定义存储过程的 SQL。

    或者:右键单击,将存储过程编写为,创建到,新建查询编辑器窗口。

    其他答案更高级,但我想也许你在问一个简单的问题:)

    【讨论】:

      【解决方案4】:

      列出所有动态管理视图的方法如下:

      SELECT * FROM sysobjects
      WHERE name LIKE 'dm_%'
      order by name
      

      不幸的是,如果您在这些文件上运行 sp_helptext,它不会给您太多帮助。例如,

      exec sp_helptext   N'sys.dm_os_sys_info'
      

      返回:

      CREATE VIEW sys.dm_os_sys_info AS
          SELECT *
          FROM OpenRowset(TABLE SYSINFO)
      

      我尝试的所有结果都相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-12
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 2010-10-27
        • 2018-07-18
        • 1970-01-01
        相关资源
        最近更新 更多