본문 바로가기
프로그래밍/TSQL

[MSSQL]현재 DB의 SP를 다른 DB로 복사하는 SP(Stored Procedure)

by 정리 습관(★arranging★) 2021. 9. 30.
728x90

현재 사용중인 동일 서버에서 다른 DB 인스턴스로 SP를 복사해야 할 때, 아래 SP를 참고하여 사용해 보세요.
열심히 만들었고, 테스트 결과 잘동작합니다.

INPUT : 복사할 대상 db 인스턴스 명
제약 : 복사할 원본 db 에서 실행
동작 : 복사할 대상 db의 기존 SP 삭제, 복사할 원본 db SP 생성 구문을 수행

CREATE PROC [dbo].[COPY_SP]
        @DB_NAME VARCHAR(100)
AS
BEGIN
        DECLARE @SQL    VARCHAR(MAX)          

        --SP 삭제      
        SET @SQL ='      DECLARE @SQL    VARCHAR(MAX)
                       DECLARE b CURSOR FOR
                       SELECT ''DROP PROC DBO.'' + P.NAME
                       FROM '+@DB_NAME+'.[sys].[procedures] p
                       INNER JOIN '+@DB_NAME+'.sys.sql_modules m ON p.object_id = m.object_id
                       
                       OPEN b
                       FETCH NEXT FROM b INTO @sql 

                       WHILE @@FETCH_STATUS = 0
                       BEGIN
                              SET @sql = REPLACE(@sql,'''''''','''''''''''')
                              SET @sql = ''USE '+@DB_NAME+'; EXEC(''''''+@sql+'''''')''
                              EXEC (@sql)

                              FETCH NEXT FROM b INTO @sql
                       END             

                       CLOSE b
                       DEALLOCATE b
                       '
        --PRINT @SQL
        EXEC(@SQL)
 
        --SP INS                      
        DECLARE @NAME   VARCHAR(1000)                        
        DECLARE c CURSOR FOR
        SELECT Definition,NAME
        FROM [sys].[procedures] p
        INNER JOIN sys.sql_modules m ON p.object_id = m.object_id
        OPEN c
        FETCH NEXT FROM c INTO @sql,@NAME

        WHILE @@FETCH_STATUS = 0
        BEGIN
               SET @sql = REPLACE(@sql,'''','''''')
               SET @sql = 'USE '+@DB_NAME+'; EXEC(''' + @sql + ''')'

               EXEC (@sql)
               FETCH NEXT FROM c INTO @sql,@NAME
        END            

		CLOSE c
        DEALLOCATE c
END

프로세스 자동화 개발이나, 편의성향상에 사용하면 좋습니다.

댓글