• 存储过程--自定义辅助过程--查看存储过程明细


    • 如题, 有点绕口, 结果就是通过如图的方式实现查看过程等信息.

    过程详细:

    /*----------------------------------------------------------*/
    /*    [sp_TextGet]                                          */
    /*----------------------------------------------------------*/
    IF EXISTS ( SELECT 1 FROM sys.objects o WHERE object_id = object_id( N'[sp_TextGet]' ) AND OBJECTPROPERTY( object_id, N'IsProcedure') = 1 )
    DROP PROCEDURE [sp_TextGet]
    GO
    CREATE PROC [sp_TextGet]
    ( @ObjectName VARCHAR(256) = NULL )
    AS
    /*
    2019-02-28 19:20
    */
    BEGIN
       SET NOCOUNT ON
       DECLARE @default_schema_name VARCHAR(128)
       
       SELECT @default_schema_name = default_schema_name 
         FROM sys.database_principals 
        WHERE name  = user_name() 
       
       SELECT @ObjectName = RTRIM( LTRIM( @ObjectName ) )
       IF( LEFT( @ObjectName, 1 ) = '[' AND RIGHT( @ObjectName, 1 ) = ']' )
       BEGIN
          SELECT @ObjectName = REPLACE( REPLACE( @ObjectName, '[', '' ), ']', '' )
       END
       
       DECLARE @id INT
       DECLARE @schemaname VARCHAR(256)
       DECLARE @Text VARCHAR(8000)
       DECLARE @name VARCHAR(256)
       DECLARE @Type VARCHAR(256)
       DECLARE @temp VARCHAR(8000)
       DECLARE @pos INT, @pos1 INT
       DECLARE name_cursor CURSOR FOR 
         SELECT schema_name( o.schema_id ), 
                o.object_id, 
                o.name, 
                o.type 
           FROM sys.all_objects o 
          WHERE ( ( o.type = 'P' ) OR  
                  ( o.type = 'FN' ) OR  
                  ( o.type = 'IF' ) OR  
                  ( o.type = 'TF' ) OR  
                  ( o.type = 'U' ) OR 
                  ( o.type = 'TR' ) OR 
                  ( o.type = 'V' ) ) AND 
                ( o.is_ms_shipped = 0 ) AND 
                ( o.name LIKE @ObjectName OR @ObjectName IS NULL ) 
       ORDER BY SCHEMA_NAME( o.schema_id ), 
                CASE o.type WHEN 'U' THEN 1 
                                     WHEN 'V' THEN 2
                                     WHEN 'FN' THEN 3
                                     WHEN 'IF' THEN 4
                                     WHEN 'TF' THEN 5
                                     WHEN 'P' THEN 6
                                     WHEN 'TR' THEN 7 
                                     ELSE 9 END, 
                o.name 
       OPEN name_cursor 
       FETCH NEXT FROM name_cursor 
       INTO @schemaname, @id, @name, @Type 
       DECLARE @C_F INT, 
               @C_P INT, 
               @C_TR INT, 
               @C_V INT 
       SELECT @C_F = 0, 
              @C_P = 0, 
              @C_TR = 0, 
              @C_V = 0
       DECLARE @drop_name VARCHAR(256), 
               @Is_name VARCHAR(256) 
       WHILE @@FETCH_STATUS = 0
       BEGIN
          IF( @Type = 'P' )
          BEGIN
             SELECT @C_P = @C_P + 1, 
                    @Is_name = 'OBJECTPROPERTY( object_id, N''IsProcedure'') = 1', 
                    @drop_name = 'PROCEDURE'
          END
          ELSE IF( @type = 'FN' OR @type = 'IF' OR @type = 'TF' )
          BEGIN
             SELECT @C_F = @C_F + 1, 
                    @Is_name = 'OBJECTPROPERTY( object_id, N''IsTableFunction'') IS NOT NULL', 
                    @drop_name = 'FUNCTION'
          END
          ELSE IF( @type = 'TR' )
          BEGIN
             SELECT @C_TR = @C_TR + 1, 
                    @Is_name = 'OBJECTPROPERTY( object_id, N''IsTrigger'') = 1', 
                    @drop_name = 'TRIGGER'
          END
          ELSE IF( @type = 'V' )
          BEGIN
             SELECT @C_V = @C_V + 1, 
                    @Is_name = 'OBJECTPROPERTY( object_id, N''IsView'') = 1', 
                    @drop_name = 'VIEW'
          END
          
          IF( @Type <> 'U' ) 
          BEGIN
             SELECT @schemaname = CASE @schemaname WHEN @default_schema_name THEN '' ELSE '[' + @schemaname + '].' END
             PRINT '/*----------------------------------------------------------*/'
             PRINT '/*    ' + @schemaname + '[' + @name + ']' + space( 54 - 2 - LEN( @name ) ) + '*/'
             PRINT '/*----------------------------------------------------------*/'
             
             PRINT 'IF EXISTS ( SELECT 1 FROM sys.objects o WHERE object_id = object_id( N''' + @schemaname + '[' + @name + ']'' ) AND ' + @Is_name + ' )'
             PRINT 'DROP ' + @drop_name + ' ' + @schemaname + '[' + @name + ']' 
             PRINT 'GO'
             DECLARE @FirstLine VARCHAR( max ), 
                     @MidLine VARCHAR( max ), 
                     @ENDLine VARCHAR( max ) 
             SELECT @temp = '', 
                    @FirstLine = '', 
                    @MidLine = '', 
                    @ENDLine = '' 
             
             DECLARE text_cursor CURSOR FOR 
               SELECT syscomments.text 
                 FROM syscomments 
                WHERE ( syscomments.id = @id ) 
             ORDER BY colid
             
             OPEN text_cursor
             FETCH NEXT FROM text_cursor INTO @Text 
             WHILE( @@FETCH_STATUS = 0 )
             BEGIN
                WHILE( CHARINDEX( ' ' + CHAR(13) + CHAR(10) + 'CREATE PROC', @Text ) > 0 )
                BEGIN
                   SELECT @Text = REPLACE( @Text, ' ' + CHAR(13) + CHAR(10) + 'CREATE PROC', 'CREATE PROC' ) 
                END
                WHILE( CHARINDEX( ' ' + CHAR(13) + CHAR(10) + 'CREATE TRIGGER', @Text ) > 0 )
                BEGIN
                   SELECT @Text = REPLACE( @Text, ' ' + CHAR(13) + CHAR(10) + 'CREATE TRIGGER', 'CREATE TRIGGER' )
                END
                WHILE( CHARINDEX( ' ' + CHAR(13) + CHAR(10) + 'CREATE FUNC', @Text ) > 0 )
                BEGIN
                   SELECT @Text = REPLACE( @Text, ' ' + CHAR(13) + CHAR(10) + 'CREATE FUNC', 'CREATE FUNC' ) 
                END
                WHILE( CHARINDEX( ' ' + CHAR(13) + CHAR(10) + 'CREATE VIEW', @Text ) > 0 )
                BEGIN
                   SELECT @Text = REPLACE( @Text, ' ' + CHAR(13) + CHAR(10) + 'CREATE VIEW', 'CREATE VIEW' ) 
                END
                
                SELECT @Text = REPLACE( @Text, CHAR(13), CHAR(10) )
                WHILE( CHARINDEX( CHAR(10) + CHAR(10), @Text, 1 ) > 0 )
                BEGIN
                   SELECT @Text = REPLACE( @Text, CHAR(10) + CHAR(10), CHAR(10) )
                END
                
                SELECT @pos = 0, 
                       @pos1 = 0 
                SELECT @pos = CHARINDEX( CHAR(10), @Text, @pos )
                IF( @pos > 0 )
                BEGIN
                   SELECT @FirstLine = ISNULL( @ENDLine, '' ) + ISNULL( LEFT( @Text, @pos - 1 ), '' ) 
                   
                   SELECT @FirstLine = REPLACE( @FirstLine, CHAR(10), CHAR(13) + CHAR(10) ) 
                   
                   WHILE( ASCII( RIGHT( @FirstLine, 1 ) ) < 32 )
                   BEGIN
                      SELECT @FirstLine = LEFT( @FirstLine, LEN( @FirstLine + '#' ) - 2 )
                   END
                   
                   PRINT @FirstLine 
                   
                   SELECT @Text = SubString( @Text, @pos + 1, 8000 ) 
                   SELECT @pos = 0, 
                          @pos1 = 0
                   SELECT @pos = CHARINDEX( CHAR(10), @Text, @pos )
                   WHILE ( @pos > 0 )
                   BEGIN
                      SELECT @pos1 = @pos
                      SELECT @pos = CHARINDEX( CHAR(10), @Text, @pos + 1 )
                   END
                   IF( @pos1 > 0 )
                   BEGIN
                      SELECT @MidLine = LEFT( @Text, @pos1 - 1 ) 
                   END
                   ELSE
                   BEGIN
                      SELECT @MidLine = @Text
                   END
                   SELECT @MidLine = ISNULL( REPLACE( @MidLine, CHAR(10), CHAR(13) + CHAR(10) ), '' ) 
                   
                   WHILE( ASCII( RIGHT( @MidLine, 1 ) ) < 32 )
                   BEGIN
                      SELECT @MidLine = LEFT( @MidLine, LEN( @MidLine + '#' ) - 2 )
                   END
                   
                   PRINT @MidLine 
                   
                   IF( @pos1 > 0 )
                   BEGIN
                      SELECT @ENDLine = SubString( @Text, @pos1 + 1, 8000 ) 
                   END
                   ELSE
                   BEGIN
                      SELECT @ENDLine = '' 
                   END
                END
                ELSE
                BEGIN
                   SELECT @ENDLine = ISNULL( @ENDLine, '' ) + ISNULL( @Text, '' ) 
                END
                FETCH NEXT FROM text_cursor INTO @Text
             END
             CLOSE text_cursor
             DEALLOCATE text_cursor 
             WHILE( ASCII( RIGHT( @ENDLine, 1 ) ) < 32 )
             BEGIN
                SELECT @ENDLine = LEFT( @ENDLine, LEN( @ENDLine + '#' ) - 2 )
             END
             
             SELECT @ENDLine = REPLACE( @ENDLine, CHAR(10), CHAR(13) + CHAR(10) )
             IF( @ENDLine IS NOT NULL AND @ENDLine <> '' )
             BEGIN
                PRINT @ENDLine 
             END
             PRINT 'GO'
          END
          FETCH NEXT FROM name_cursor 
          INTO @schemaname, @id, @name, @type 
       END
       CLOSE name_cursor
       DEALLOCATE name_cursor 
       
       SELECT @C_F AS [FUNC], 
              @C_P AS [PROC], 
              @C_TR AS [TRIG], 
              @C_V AS [VIEW] 
       
         SELECT DISTINCT schema_name( o.schema_id ), 
                o.object_id, 
                o.name, 
                o.type, 
                o.create_date, 
                o.modify_date, 
                CASE o.type WHEN 'U' THEN 1 
                                     WHEN 'V' THEN 2
                                     WHEN 'FN' THEN 3
                                     WHEN 'IF' THEN 4
                                     WHEN 'TF' THEN 5
                                     WHEN 'P' THEN 6
                                     WHEN 'TR' THEN 7 END as ListOrder
           FROM sys.all_objects o 
          WHERE ( ( o.type = 'P' ) OR  
                  ( o.type = 'FN' ) OR  
                  ( o.type = 'IF' ) OR  
                  ( o.type = 'TF' ) OR  
                  ( o.type = 'TR' ) OR 
                  ( o.type = 'V' ) ) AND 
                ( o.is_ms_shipped = 0 ) AND
                ( o.name LIKE @ObjectName OR @ObjectName IS NULL ) 
       ORDER BY schema_name( o.schema_id ), 
                CASE o.type WHEN 'U' THEN 1 
                                     WHEN 'V' THEN 2
                                     WHEN 'FN' THEN 3
                                     WHEN 'IF' THEN 4
                                     WHEN 'TF' THEN 5
                                     WHEN 'P' THEN 6
                                     WHEN 'TR' THEN 7 END, 
                o.name 
       
       SET NOCOUNT OFF
    END
    GO
     
    
  • 相关阅读:
    Running ROS on Windows 10
    Roomblock: a Platform for Learning ROS Navigation With Roomba, Raspberry Pi and RPLIDAR(转)
    Understand:高效代码静态分析神器详解(转)
    VMware下ubuntu与Windows实现文件共享的方法
    Install rapyuta client on Ubuntu14.04
    Install rapyuta client on Raspberry Pi
    Installing ROS Indigo on the Raspberry Pi
    Shrinking images on Linux
    How to emulate a Raspberry Pi on your PC
    Remastersys打包你自己的ubuntu成iso文件
  • 原文地址:https://www.cnblogs.com/hijushen/p/10454558.html
Copyright © 2020-2023  润新知