database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 4388 게시물 읽기
No. 4388
stored procedure만 export 할 수 있나요?
작성자
궁금
작성일
2008-08-09 05:17
조회수
6,692

mssql에서 export하면 data만 되는거 같아서요.
혹시 stored procedure만 txt file로 export 할 수 없나요?
가끔 백업을 해야할 것 같아서요.

이 글에 대한 댓글이 총 2건 있습니다.

아래의 부분을 script.vbs로 하시고 
argument에 맞게하여 실행하면 Procedure만 다운 받으실수 있습니다. 
다만 2000이하에서만 가능합니다. 

'***************************************************************************************************
' SQL DMO, File SystemObject, shell을 이용 Database Object별 Secript 생성
' Argument 설명
' arg 0 : saveRoot dir(local 또는 Unc)
' arg 1 : database Login Id
' arg 2 : database Login Pwd
' arg 3 : server name, server IP
' arg 4 : scripting을 할 데이터베이스 네임
'
' Run Example ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
' prompt:\>cscript script.vbs  "c:\script\" "sa" "youly92" "youlyN" "youlyDB"
' 확인 : c:\script
'***************************************************************************************************
'변수들에 대한 개체 정의
Dim objArgs, objSql, fso, WshShell, objDb, dbName
Dim ScriptDb, saveDir

Set objSQL = CreateObject("SQLDMO.SQLServer")   
Set fso = CreateObject ("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")

Set objArgs = Wscript.Arguments

saveDir = objArgs(0)

objSQL.LoginSecure = False 'Trust된 곳이라면 당연히 True가 되면서 Login pwd불필요
objSQL.Login = objArgs(1)
objSQL.Password = objArgs(2)

'Server Connect 하삼
objSQL.Connect objArgs(3)

Set objDB = objSQL.Databases

If Not(fso.FolderExists(saveDir)) Then
    createFolder saveDir
End If

scriptDb = objArgs(4)

If NOT(fso.FolderExists(saveDir & scriptDb)) Then
    createFolder saveDir & scriptDb
End If

''''여기서 부터 개체 콜하기 시작
For each dbName in objDB
   If LCase(dbName.name) = LCase(scriptDb) Then
        
    
     ScriptOut dbName.StoredProcedures, "StoredProcs"

   End If
Next

''''이놈은 파일을 만들 sub proc
Sub ScriptOut(object, foldername)
    For each item in object
        If item.SystemObject = False Then
            createFolder saveDir & scriptDb & "\" & foldername     
            sFileName = saveDir & scriptDb & "\" & foldername & "\" & Replace(item.Name, "\", "-") & ".sql"
           ' MsgBox item.Script
            If IsNull(item.script) Or IsEmpty(item.script) Then
           Else  
            If IsNull(sFileName) Or IsEmpty(sFileName) Then
            Else
             item.Script 4, sFileName
            End If
           End If
        End If
    Next
End Sub

''''이놈은 폴더를 만들  sub proc 'fso의 약간의 버그로 인한..
Sub createFolder(fName)
    If NOT(fso.FolderExists(fName)) Then
        WshShell.Run "cmd /c md " & fName     
        WScript.Sleep 1000
    End If 
End Sub

여리님이 2008-08-09 16:00에 작성한 댓글입니다. Edit

mssql에서 제공해주는 툴/유틸이 없는거 같아서요.
이 방법 저방법 해보다가 결국은 vbs 짰네요.

다른 분들 참고하세요.
그냥 급하게 작성해서 써먹은거라 좀 코딩이 이뿌지는 않습니다. 밑에 잘못한거 있을 수 있구요.
상황에 맞춰서 바꿔 쓰시면 되실 것 같습니다.
그리고 아래 서너네임, 디비네임이랑 아뒤패스워드 바꾸시는거 잊지 마시구요.

'**********************************************************************
'  Visual Basic ActiveX Script
'************************************************************************

Function Main()
 ExportStoredProcedure "DataBaseName","C:\Util\DP_RE"
 Main = DTSTaskExecResult_Success
End Function



Function ExportStoredProcedure(sDatabase,path)

 Set fso = CreateObject("Scripting.FileSystemObject")
 If not fso.FolderExists(path) Then
  msgBox "The folder path is invalid. Please, Check the folder path and try again."
  Exit Function
 End If

  dim sql
  sql = "SELECT dbo.syscomments.id, dbo.syscomments.colid, dbo.syscomments.text" &  _
   " FROM dbo.syscomments " &  _
   "  INNER JOIN dbo.sysobjects ON dbo.syscomments.id = dbo.sysobjects.id"  &  _
  "  WHERE (dbo.sysobjects.xtype = 'p')" &  _
  " ORDER BY dbo.syscomments.id, dbo.syscomments.colid asc"

 Dim ConnectionString, rs
 dim con

 ConnectionString = "Provider=SQLOLEDB; Data Source=SERVERNAME; Initial Catalog=" & sDatabase & "; User ID=XXXX; Password=XXXX"
 set con=CreateObject("ADODB.Connection")
 con.open ConnectionString
 Set rs = CreateObject("ADODB.Recordset")

 rs.Open sql, con
 Set FileWrite = fso.OpenTextFile(Path + "start.txt", 2, true)

 Do While Not rs.EOF
  
  If rs(1) = 1 Then
   FileWrite.Close
   dim sql2
   sql2 = "select dbo.sysobjects.name from dbo.sysobjects where dbo.sysobjects.id = " & rs(0)
   set rs2 = CreateObject("ADODB.Recordset")
   rs2.open sql2, con
   do while not rs2.eof
    Set FileWrite = fso.OpenTextFile(path & "\" & rs2(0) & ".sql", 2, true)
    rs2.MoveNext
   Loop
   rs2.close
   FileWrite.Write rs(2)
  else
   FileWrite.Write rs(2)
  end if
  rs.MoveNext
 Loop
 FileWrite.Close
 Set FrileWrite = nothing
 set rs2 = nothing

      rs.Close
 con.close
 set rs = nothing
 set con = nothing
End Function

 '**********************************************************************
'  END
'************************************************************************

궁금님이 2008-08-12 05:53에 작성한 댓글입니다.
이 댓글은 2008-08-12 05:55에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4392access 에서 중복된 값을 지울려면.. [1]
최재환
2008-08-13
6422
4390계층 구조 데이터 조회 시 묶어서 보여주는 방법 [2]
이성재
2008-08-11
5176
4389프로시져에서 100개씩 데이타를 읽어서 하나의 Insert문으로 만들기. [4]
홍성훈
2008-08-11
6668
4388stored procedure만 export 할 수 있나요? [2]
궁금
2008-08-09
6692
4387access에서 날짜 입력해서 해당날짜 데이터 뽑아내기.
데이터 베이서
2008-08-08
4795
4386날짜관련. [1]
불독
2008-08-07
5237
4385sql agent 가 잘 작동하다 멈추곤합니다. 도와주세요~ [1]
이성민
2008-08-06
4777
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다