列出用户定义的存储过程及其描述
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:
也可以提取其他文档。
我们有一个非常自动化的数据库,用于工作中的内部报告。它是 运行 在许多通过 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:
也可以提取其他文档。