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
프로세스 자동화 개발이나, 편의성향상에 사용하면 좋습니다.
'프로그래밍 > TSQL' 카테고리의 다른 글
[MSSQL] DB MODE 확인 및 변경 (0) | 2022.05.10 |
---|---|
데이터베이스 MDF LDF 이동 (0) | 2021.10.15 |
[MSSQL]형상 자르기 geometry 함수 (0) | 2021.09.30 |
[MSSQL] datetime vs datetime2 타입 차이 (0) | 2021.08.25 |
[MSSQL]병렬처리의 조건 (0) | 2021.07.08 |
댓글