최근 포토로그


SP_HELPTEXT 의 완성판( 줄이 밀리는 현상 해결) MSSQL과 ORACLE

SP_HELPTEXT 를 쓰다보면 자꾸 라인이 깨지는 현상이 가끔 가다가 발견한다.

이게 현상의 원인이 무엇인지 알아내지 못해서 몇년동안 고생해서 
차라리 SSMS에서 그냥 수정을 누르거나 라인을 일일이 다시 조정해주고 실행해주는 번거로움을 겪어야 했다.

이거 SP 많이 다루는 사람은 알겠지만, 정말 큰 스트레스다.

그래서 구글링은 몇년동안 지속적으로 한 결과 결국 답을 찾아냈다.


찬양하라 구글신이여!!!!


이제 드디어 SP_HELPTXTX의 버그 없는 판을 만든 것이다.

SP 참조 (참고로 여기 버전은 ALTER PROC부분으로 수정한다든지, 콘솔창에 찍어주는 부분도 포함되었다.
뜯어보시고 수정하시라.


==================================================
CREATE PROCEDURE SP_HELPTEXT2
( @PROCNAME NVARCHAR(256)
)
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @PROC_TABLE TABLE (X1  NVARCHAR(MAX))

    DECLARE @PROC NVARCHAR(MAX)
    DECLARE @PROCEDURE NVARCHAR(MAX)
    DECLARE @PROCLINES TABLE (PLID INT IDENTITY(1,1), LINE NVARCHAR(MAX))
    DECLARE @SEQ INT
    DECLARE @TEXT NVARCHAR(4000)

    SELECT @PROCEDURE = 'SELECT DEFINITION FROM ['+DB_NAME()+'].SYS.SQL_MODULES WHERE OBJECT_ID = OBJECT_ID('''+@PROCNAME+''')'

    INSERT INTO @PROC_TABLE (X1)
          EXEC  (@PROCEDURE)

    SELECT @PROC=X1 FROM @PROC_TABLE

    WHILE CHARINDEX(CHAR(13)+CHAR(10),@PROC) > 0
    BEGIN
          INSERT @PROCLINES
          SELECT LEFT(@PROC,CHARINDEX(CHAR(13)+CHAR(10),@PROC)-1)
          SELECT @PROC = SUBSTRING(@PROC,CHARINDEX(CHAR(13)+CHAR(10),@PROC)+2,LEN(@PROC))
    END
    --* INSERTS LAST LINE
    INSERT @PROCLINES
    SELECT @PROC ;
    -- 이부분을 넣으면 테이블그리드로 나온다.
    --SELECT LINE FROM @PROCLINES ORDER BY PLID


    DECLARE SCRIPTCURSOR9 CURSOR LOCAL FORWARD_ONLY STATIC FOR
        SELECT PLID, LINE FROM @PROCLINES ORDER BY PLID

    OPEN SCRIPTCURSOR9

    FETCH NEXT FROM SCRIPTCURSOR9 INTO @SEQ, @TEXT

    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- 1번라인에 CREATE 부분을 수정
        IF @SEQ <= 1
        BEGIN
            SET @TEXT = REPLACE(@TEXT, 'CREATE PROC', 'ALTER PROC')
            SET @TEXT = REPLACE(@TEXT, 'CREATE FUNC', 'ALTER FUNC')
            SET @TEXT = REPLACE(@TEXT, 'CREATE VIEW', 'ALTER VIEW')
        END
        PRINT @TEXT

        FETCH NEXT FROM SCRIPTCURSOR9 INTO @SEQ, @TEXT
    END

    CLOSE SCRIPTCURSOR9
    DEALLOCATE SCRIPTCURSOR9

    --DROP TABLE  @PROCLINES

END

덧글

댓글 입력 영역