itsource

SQL Server Management Studio 2008에서 스크립트 생성 태스크를 자동화하려면 어떻게 해야 합니까?

mycopycode 2023. 4. 17. 21:47
반응형

SQL Server Management Studio 2008에서 스크립트 생성 태스크를 자동화하려면 어떻게 해야 합니까?

SQL Server Management Studio 2008에서 스크립트 생성을 자동화하고 싶습니다.

지금 내가 하는 일은:

  • 데이터베이스 태스크에서 마우스 오른쪽 단추를 누릅니다. "스크립트 생성..."
  • 필요한 내보내기 옵션을 모두 수동으로 선택하고 "Select object" 탭에서 select all을 누릅니다.
  • 내보내기 폴더 선택
  • 최종적으로는 [완료]버튼을 누릅니다.

이 작업을 자동화하는 방법이 있습니까?

편집 : 스크립트를 변경하는 것이 아니라 작성 스크립트를 생성합니다.

SqlPubwiz는 SSMS의 스크립트 생성에 비해 옵션이 매우 한정되어 있습니다.반면, SMO에서 사용할 수 있는 옵션은 SSMS의 옵션과 거의 일치하고 있기 때문에, 같은 코드일 가능성이 있습니다.(MS가 두 번 쓰지 않았으면 좋겠어!)MSDN에는 이와 같은 스크립트테이블을 개개의 오브젝트로 표시하는 예가 몇 가지 있습니다.그러나 외부 키와 같은 'DRIVE(Declarative Reference Integrity)' 개체를 포함하는 '전체' 스키마를 사용하여 모든 것이 올바르게 스크립팅되도록 하려면 스크립팅 테이블을 개별적으로 스크립팅해도 종속성이 올바르게 처리되지 않습니다.모든 URN을 수집하여 배열로 스크립터에 건네야 한다는 것을 알았습니다.이 코드는 예에서 변경된 것으로, 나에게 도움이 됩니다(단, 정리해서 코멘트를 좀 더 해 주세요).

    using Microsoft.SqlServer.Management.Smo;
    using Microsoft.SqlServer.Management.Sdk.Sfc;
    // etc...

    // Connect to the local, default instance of SQL Server. 
    Server srv = new Server();

    // Reference the database.  
    Database db = srv.Databases["YOURDBHERE"];

    Scripter scrp = new Scripter(srv);
    scrp.Options.ScriptDrops = false;
    scrp.Options.WithDependencies = true;
    scrp.Options.Indexes = true;   // To include indexes
    scrp.Options.DriAllConstraints = true;   // to include referential constraints in the script
    scrp.Options.Triggers = true;
    scrp.Options.FullTextIndexes = true;
    scrp.Options.NoCollation = false;
    scrp.Options.Bindings = true;
    scrp.Options.IncludeIfNotExists = false;
    scrp.Options.ScriptBatchTerminator = true;
    scrp.Options.ExtendedProperties = true;

    scrp.PrefetchObjects = true; // some sources suggest this may speed things up

    var urns = new List<Urn>();

    // Iterate through the tables in database and script each one   
    foreach (Table tb in db.Tables)
    {
        // check if the table is not a system table
        if (tb.IsSystemObject == false)
        {
            urns.Add(tb.Urn);
        }
    }

    // Iterate through the views in database and script each one. Display the script.   
    foreach (View view in db.Views)
    {
        // check if the view is not a system object
        if (view.IsSystemObject == false)
        {
            urns.Add(view.Urn);
        }
    }

    // Iterate through the stored procedures in database and script each one. Display the script.   
    foreach (StoredProcedure sp in db.StoredProcedures)
    {
        // check if the procedure is not a system object
        if (sp.IsSystemObject == false)
        {
            urns.Add(sp.Urn);
        }
    }

    StringBuilder builder = new StringBuilder();
    System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray());
    foreach (string st in sc)
    {
        // It seems each string is a sensible batch, and putting GO after it makes it work in tools like SSMS.
        // Wrapping each string in an 'exec' statement would work better if using SqlCommand to run the script.
        builder.AppendLine(st);
        builder.AppendLine("GO");
    }

    return builder.ToString();

Brann이 Visual Studio 2008 SP1 Team Suite에서 언급하고 있는 것은 Database Publishing Wizard 버전 1.4입니다.SQL Server 2008(프로페셔널 전용)과 함께 \Program Files\Microsoft SQL Server\90\에 설치됩니다.도구\공개\1.4.서버 탐색기로부터의 VS 콜은 단순히 이것을 호출하고 있습니다.명령줄을 통해 다음과 같은 동일한 기능을 구현할 수 있습니다.

sqlpubwiz help script

v1.4는 v1.1과 같은 문제(사용자가 역할로 변환되고 제약조건이 올바른 순서로 작성되지 않음)를 안고 있는지는 알 수 없지만 SSMS의 [태스크]> [스크립트 생성(Generate Scripts)]옵션과 같이 오브젝트를 다른 파일로 스크립팅하지 않기 때문에 해결 방법은 아닙니다.현재 데이터베이스 퍼블리싱 마법사(sqlpubwiz.exe)를 대체하는 개량된 버전의 Scriptio(MS SMO API 사용)를 사용하고 있습니다.현재 명령줄에서 스크립트를 작성할 수 없습니다. 나중에 추가하겠습니다.

Scriptio는 원래 Bill Graziano의 블로그에 게시되었지만, 이후 Bill에 의해 CodePlex에 공개되고 다른 사람들에 의해 갱신되었습니다.SQL Server 2008에서 사용하기 위해 컴파일하는 방법에 대한 자세한 내용은 설명을 참조하십시오.

http://scriptio.codeplex.com/

편집: 그 후 RedGate의 SQL Compare 제품을 사용하기 시작했습니다.SQL Publishing Wizard를 대체하기 위한 매우 좋은 방법입니다.데이터베이스, 백업 또는 스냅샷을 소스로, 폴더를 출력 위치로 선택하면 모든 것이 폴더 구조로 덤프됩니다.다른 제품인 SQL Source Control에서 사용하는 형식과 동일합니다.

기능을 하는 SchemaZen이라는 오픈소스 명령줄 유틸리티를 작성했습니다.관리 스튜디오에서 스크립팅하는 것보다 훨씬 빠르며, 버전 관리가 용이한 출력입니다.스키마 및 데이터 스크립팅을 모두 지원합니다.

실행 중인 스크립트를 생성하려면:

schemazen.exe 스크립트 --server localhost --database db --scriptDir c:\somedir

다음으로 실행 중인 스크립트에서 데이터베이스를 다시 작성하려면 다음 절차를 수행합니다.

schemazen.exe create --server localhost --database db --scriptDir c:\somedir

SQL Server Management Object(SMO)를 사용하여 스크립트 생성을 포함한 SQL Server 2005 관리 태스크를 자동화할 수 있습니다.http://msdn.microsoft.com/en-us/library/ms162169.aspx

개발자인 경우 반드시 SMO를 선택하십시오. 다음은 스크립터 클래스 링크입니다.

스크립터 클래스

SQLPSX를 사용한 powershell은 이 답변들 중 어느 것도 언급되지 않았습니다.개인적으로 가지고 놀지는 않았지만, 사용하기 매우 간단해 보이고, 다음과 같은 자동화 작업에 이상적입니다.

Get-SqlDatabase -dbname test -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path C:\script.sql
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlView | Get-SqlScripter

(참조: http://www.sqlservercentral.com/Forums/Topic1167710-1550-1.aspx#bm1168100)

프로젝트 페이지: http://sqlpsx.codeplex.com/

이 접근방식의 주요 장점은 SMO를 직접 사용하는 경우의 구성성/커스터마이즈성과 데이터베이스 퍼블리싱 마법사 등의 단순한 기존 툴을 사용하는 경우의 편리성과 유지보수가 결합된 것입니다.

[툴(Tools)]> [옵션(Options)]> [디자이너(Designers)]> [테이블 및 데이터베이스 설계자(Table and Database Designers)]에는 변경 시마다 변경 스크립트를 자동으로 생성하는 옵션이 있습니다.

INFORMATION_SCHEMA 테이블을 사용하여 T-SQL 코드를 사용할 수 있습니다.

서드파티 툴도 있습니다.Apex SQL Script는 말씀하신 대로 사용할 수 있습니다.명령줄에서 완전히 실행합니다.

Microsoft 솔루션을 원하는 경우 Microsoft SQL Server Database Publishing Wizard 1.1을 사용해 보십시오.

http://www.microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

스크립트를 재구축할 때 언제든지 실행할 수 있는 배치 프로세스가 생성됩니다.

새로운 SQL Server 명령줄 도구를 사용하여 T-SQL 스크립트를 생성하고 동적 관리 보기를 모니터링합니다.

나한테 매력적으로 작용했어이것은 명령줄에서 실행되는 Microsoft의 새로운 python 기반 도구입니다.모든 것은 Microsoft 페이지에 기재되어 있는 대로 동작합니다(아래 링크 참조).SQL 2012 서버에서는 동작합니다.

pip을 사용하여 설치합니다.

$140 install mssql-scripter

명령어 파라미터의 개요는 다음과 같습니다.도움말의 경우 h를 사용합니다.

mssql-scripter -h

힌트: Windows 인증을 통해 SQL-Server에 로그인하는 경우 사용자 이름과 비밀번호는 그대로 두십시오.

https://cloudblogs.microsoft.com/sqlserver/2017/05/17/try-new-sql-server-command-line-tools-to-generate-t-sql-scripts-and-monitor-dynamic-management-views/

DB Comparer를 사용하고 있습니다.DB 전체를 무료로 스크립트로 하여 다른 DB와 비교하거나 Diff 스크립트를 생성할 수 있습니다.개발에서 프로덕션 변경 스크립트에 매우 적합합니다.http://www.dbcomparer.com/

Visual Studio 2008 SP1 TeamSuite에서 :

[ Server Explorer / Data Connections ]탭에는 "Microsoft SQL Server Database Publishing Wizard"와 동일하지만 MS SQL Server 2008과 호환되는 Publish to Provider 툴이 있습니다.

이 간단한 명령줄 툴도 필요에 따라 만듭니다.
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/

전체 DB를 내보낼 수 있으며 암호화된 개체 내보내기를 시도합니다.모든 파일은 폴더와 개별 SQL 파일에 저장되므로 파일을 쉽게 비교할 수 있습니다.

코드는 github에서도 사용할 수 있습니다.

VS 2012(MS SQL Server 2008의 DB용)를 사용하고 있는 경우 비교 데이터베이스에는 저장 옵션, 비교 및 옵션이 있습니다.이것은 기본적으로 배송을 위한 설정입니다.그런 다음 스크립트를 업데이트하거나 생성할 수 있습니다.

솔루션 탐색기에는 파일이 보이지 않기 때문에 나중에 파일에서 로드(Windows 탐색기에서 드래그 앤 드롭)하는 것이 조금 어색할 뿐입니다.

언급URL : https://stackoverflow.com/questions/483568/how-can-i-automate-the-generate-scripts-task-in-sql-server-management-studio-2

반응형