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('파일 저장 경로를 입력해주세요.'161)
        RETURN
    END
IF ISNULL(@FileName,''= ''
    BEGIN
        RAISERROR('파일명을 입력해주세요.'161)
        RETURN
    END
IF ISNULL(@FileExtendName,''= ''
    BEGIN
        RAISERROR('파일확장자명을 입력해주세요.'161)
        RETURN
    END
SET @File = @FilePath + @FileName + @FileExtendName
EXEC SP_OACREATE  'SCRIPTING.FILESYSTEMOBJECT', @RETURN OUT
EXEC SP_OAMETHOD @RETURN, 'OPENTEXTFILE', @FileID OUT, @File, 81
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