列出用户定义的存储过程及其描述

List user defined stored procedures with their description

我们有一个非常自动化的数据库,用于工作中的内部报告。它是 运行 在许多通过 sqlcmd 执行的存储过程上,随着存储过程列表越来越大,手动维护每个 SP 正在做的事情的文档对我来说似乎是一种折磨我开始思考一个查询,它可以让我获得所有用户定义过程及其内置代码描述的列表。

示例过程名称 - dbo.RemedySelect 描述块:

-- =============================================
-- Author:      author_id
-- Create date: 2015/08/03
-- Description: {Insert data from Remedy Report into SRC_REMEDY_RAW table}
-- Batch name:  remedy_import.cmd
-- =============================================

在SO(link)上找到有用的查询代码,稍微修改一下:

select 
    p.object_id                 as [SP_ID]
    ,p.[name]                   as [SP_NAME]
    ,p.create_date              as [CREATE_DATE]
    ,p.modify_date              as [MODIFY_DATE]
    -- get the description string from between '{' and '}' characters
    ,replace(substring(c.[definition], charindex('{',c.[definition])+1 ,((charindex('}',c.[definition]))-((charindex('{',c.[definition]))))),'}','')as [SP_DESCRIPTION]

from sys.objects p
  join sys.sql_modules c
    on p.object_id = c.object_id
where p.[type] = 'P'
    and p.is_ms_shipped = 0
   and c.[definition] like '%Description%'
order by p.create_date

下面是上述查询的结果:

SP_ID       SP_NAME         CREATE_DATE             MODIFY_DATE             SP_DESCRIPTION
1613248802  RemedySelect    2015-08-18 09:17:28.880 2016-02-18 17:32:13.983 Insert data from Remedy Report into SRC_REMEDY_RAW table

当有几十个或上百个存储过程时,我发现它非常有用。它帮助我使文档保持最新。 我很乐意听取您对代码和维护存储过程文档的一般方法的反馈。

我可能会跳过使用大括号并使用这个:

select 
    p.object_id                 as [SP_ID]
    ,p.[name]                   as [SP_NAME]
    ,p.create_date              as [CREATE_DATE]
    ,p.modify_date              as [MODIFY_DATE]
    ,ltrim(rtrim(substring(
        c.[definition],
        charindex('-- Description:',c.[definition]) + len('-- Description:') + 1,
        charindex('--', c.[definition], charindex('-- Description:',c.[definition]) + 2) - charindex('-- Description:',c.[definition]) - len('-- Description:') - 3
    ))) as [SP_DESCRIPTION]
from sys.objects p
  join sys.sql_modules c
    on p.object_id = c.object_id
where p.[type] = 'P'
    and p.is_ms_shipped = 0
   and c.[definition] like '%-- Description:%[' + CHAR(13)+CHAR(10)+']%'
order by p.create_date

这将处理 one-line 这样的描述:

-- =============================================
-- Author:      author_id
-- Create date: 2015/08/03
-- Description: Insert data from Remedy Report into SRC_REMEDY_RAW table
-- Batch name:  remedy_import.cmd
-- =============================================

用评论中的其他标题替换 -- Description: 也可以提取其他文档。