Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从存储过程/函数中获取代码注释并填充到表中?_Sql_Sql Server - Fatal编程技术网

Sql 如何从存储过程/函数中获取代码注释并填充到表中?

Sql 如何从存储过程/函数中获取代码注释并填充到表中?,sql,sql-server,Sql,Sql Server,如何从存储过程/函数中获取代码注释并填充到表中 /* Author : Test Comment : Test */ 我正在处理一个用户定义的函数,通过传递存储过程或函数作为输入参数来读取代码历史注释并将其存储在表中。将详细信息保存在表格中,以维护输入的版本注释。您可以创建一个函数/存储过程来实现这一点: CREATE FUNCTION InsertCommentIntoTable ( @Param1 VARCHAR(200) ) RETURNS int AS BEGIN

如何从存储过程/函数中获取代码注释并填充到表中

/*
Author : Test
Comment : Test
*/

我正在处理一个用户定义的函数,通过传递存储过程或函数作为输入参数来读取代码历史注释并将其存储在表中。将详细信息保存在表格中,以维护输入的版本注释。

您可以创建一个函数/存储过程来实现这一点:

CREATE FUNCTION InsertCommentIntoTable
(   
    @Param1 VARCHAR(200)
)
RETURNS int
AS
BEGIN
    -- Declare the return variable here

    DECLARE @str VARCHAR(max)
    SELECT @str = definition  
    FROM sys.sql_modules  
    WHERE object_id = (OBJECT_ID(N'dbo.CustOrderHist'));

    --parse @str string value and do your stuffs: @str has the function and stored procedure codes.

    RETURN 0;

END
GO

选中此项,有不同的方法获取定义,我更喜欢
sp_helptext
,因为它已经被拆分成了行

DECLARE @Objects TABLE(name varchar(100))
DECLARE @Lines TABLE(id int identity, line varchar(maX))

INSERT @Objects
SELECT name FROM sys.objects WHERE Type in ('FN', 'IF', 'P', 'TR', 'TF') 

DECLARE @ObjectName VARCHAR(100)
WHILE EXISTS (SELECT 1 FROM @Objects)
BEGIN
    SELECT TOP 1 @ObjectName = name FROM @Objects

    DELETE @Lines

    INSERT @Lines (line)
    exec sp_helptext @ObjectName

    DECLARE @Linestart INT, @LineEnd INT
    WHILE EXISTS(SELECT 1 FROM @Lines WHERE charindex('/*', line) > 0)
    BEGIN
        SELECT TOP 1 @Linestart = id
        FROM @Lines WHERE charindex('/*', line) > 0
        ORDER BY id

        SELECT TOP 1 @LineEnd = id
        FROM @Lines WHERE charindex('*/', line) > 0
        ORDER BY id

        DECLARE @comment VARCHAR(MAX) = ''

        SELECT @Coment = @coment + char(13) + char(10) + line
        FROM @Lines 
        WHERE id between @LineStart and @lineEnd

        INSERT INTO yourtable (@objectName, @Comment)

        DELETE @Lines WHERE id between @LineStart and @lineEnd
    END


    DELETE @Objects WHERE name = @ObjectName
END

这实际上并没有回答问题,OP问的是如何提取评论,而不是如何提取定义。谢谢。。这个逻辑很好。。我必须根据我的需要改变这个。。但结果真的很好……很高兴能帮上忙:)