1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | /* 2019 09 27 JH HYUN * Window OS에서만 가능(LINUX 안됨) * 특정 프로시저를 원하는 경로에 스크립팅 * 프로시저 리스트는 아래 쪽 커서 SELECT 절에서 조회하도록 하면 됨 * FilePath는 제일 뒤에 \까지 붙여야 함 * FileName은 저장할 파일명 * FileExtendName은 확장자명(.sql) * 나머지는 프로그램 로직 내에서 사용하는 변수이므로 건들지 말 것 */ DECLARE @FilePath VARCHAR(1000) = 'C:\tmp\' ,@FileName NVARCHAR(500) = 'SCRIPT' ,@FileExtendName VARCHAR(10) = '.sql' ,@EACHTEXT NVARCHAR(MAX) = '' ,@File VARCHAR(1000) ,@FileID INT ,@RETURN INT --전체 스크립트 파일 텍스트 DECLARE @ALLTEXT NVARCHAR(MAX) = '' IF ISNULL(@FilePath,'') = '' BEGIN RAISERROR('파일 저장 경로를 입력해주세요.', 16, 1) RETURN END IF ISNULL(@FileName,'') = '' BEGIN RAISERROR('파일명을 입력해주세요.', 16, 1) RETURN END IF ISNULL(@FileExtendName,'') = '' BEGIN RAISERROR('파일확장자명을 입력해주세요.', 16, 1) RETURN END SET @File = @FilePath + @FileName + @FileExtendName EXEC SP_OACREATE 'SCRIPTING.FILESYSTEMOBJECT', @RETURN OUT EXEC SP_OAMETHOD @RETURN, 'OPENTEXTFILE', @FileID OUT, @File, 8, 1 DECLARE sCursor CURSOR LOCAL FOR ( --여기서 어떤 프로시저를 스크립트로 생성할 것인지 체크 SELECT OBJECT_DEFINITION(A.object_id) FROM TestDB1.SYS.PROCEDURES A WITH(NOLOCK) LEFT JOIN TestDB2.SYS.PROCEDURES B WITH(NOLOCK) ON OBJECT_NAME(A.OBJECT_ID) = OBJECT_NAME(B.OBJECT_ID) WHERE OBJECT_NAME(B.object_id) IS NULL ) OPEN sCursor FETCH NEXT FROM sCursor into @EACHTEXT WHILE @@FETCH_STATUS >= 0 BEGIN SELECT @ALLTEXT = @ALLTEXT + @EACHTEXT + char(13) + char(10) + char(13) + char(10) FETCH NEXT FROM sCursor into @EACHTEXT END CLOSE sCursor DEALLOCATE sCursor EXEC SP_OAMETHOD @FileID, 'WRITELINE', NULL , @ALLTEXT EXECUTE SP_OADESTROY @FileID EXECUTE SP_OADESTROY @RETURN PRINT @File + ' save' GO | cs |
위의 커서 부분을 보면 TestDB1 DB와 TestDB2 DB의 프로시저 리스트를 비교 후
TestDB1에만 존재하는 프로시저만 스크립트로 생성하는 쿼리이다.
이 쿼리를 이용해서 TestDB2에 반영하면 업데이트하기 편함
'DB > MS-SQL' 카테고리의 다른 글
MSSQL 특정 테이블 스키마 생성 스크립트 (0) | 2021.02.23 |
---|---|
MSSQL FULL 백업 및 TRANSACTION LOG 백업 프로시저 (0) | 2021.02.23 |
MSSQL SPLIT (0) | 2018.12.22 |
MSSQL 쿼리 모음(21/02/23) (0) | 2018.12.22 |
MSSQL 메일 발송 (0) | 2018.12.22 |