SQL Server 2012 : 명령 줄에서 스크립트 생성


19

SQL Server 2012를 실행하고 있습니다.

SQL Server Management Studio에는 데이터베이스를 마우스 오른쪽 단추로 클릭 한 다음 작업 및 스크립트 생성을 선택할 수있는 옵션이 있습니다.

어떻게 든 명령 줄을 통해 자동화 할 수 있습니까?

전체 데이터베이스의 스키마와 데이터를 포함하는 스크립트를 만들고 싶습니다.

도구를 좋아 ScriptDB하고 sqlpubwiz.exe모두 2012 SQL Server에 대한 SQL Server 2005에 무엇을 목표로하는 것?

답변:


20

가장 자주 사용하는 경우 Powershell을 사용하는 것이 가장 좋습니다. Powershell 및 SMO를 사용한 자동화 된 스크립트 생성을 참조 할 수 있습니다 .

또한 Powershell로 작업 할 때 SQLPSX (SQL Server PowerShell Extensions) 는 큰 가치가 있습니다. 모든 모듈에 도움말 파일 (예 : Get-SqlScripter)이 있습니다.

Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path D:\scripts\script.sql
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter
Get-SqlDatabase -dbname database1 -sqlserver server | Get-SqlView | Get-SqlScripter

타사 도구의 경우 체크 아웃하는 것이 좋습니다 (많은 타사 도구가 있지만 아래에서 사용한 도구가 많으며 훌륭합니다).


9

SchemaZen 이라는 오픈 소스 명령 줄 유틸리티를 작성했습니다 . 관리 스튜디오의 스크립팅보다 훨씬 빠르며 출력은 버전 관리가 더 쉽습니다. 스키마와 데이터 스크립팅을 모두 지원합니다.

스크립트를 생성하려면 다음을 실행하십시오.

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

그런 다음 스크립트에서 데이터베이스를 다시 작성하려면 다음을 실행하십시오.

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

9

Microsoft의 Tara Raj는 최근 Microsoft SQL 팀 이 요청한대로 정확하게 수행하는 것처럼 보이는 T-SQL 스크립트를 생성 하는 일련의 명령 줄 도구를 발표했다고 발표했습니다 .

mssql- 스크립트

Mssql-scripter는 SSMS에서 널리 사용되는 스크립트 생성 마법사 환경과 동등한 멀티 플랫폼 명령 줄입니다.

Linux, macOS 및 Windows에서 mssql-scripter를 사용하여 어디서나 실행중인 SQL Server, Azure SQL Database 및 Azure SQL Data Warehouse의 데이터베이스 개체에 대한 DDL (데이터 정의 언어) 및 DML (데이터 조작 언어) T-SQL 스크립트를 생성 할 수 있습니다. . 생성 된 T-SQL 스크립트를 .sql 파일에 저장하거나 추가 변환을 위해 표준 * nix 유틸리티 (예 : sed, awk, grep)로 파이프 할 수 있습니다. 생성 된 스크립트를 편집하거나 소스 제어로 체크인 한 후 sqlcmd와 같은 표준 다중 플랫폼 SQL 명령 행 도구를 사용하여 기존 SQL 데이터베이스 배치 프로세스 및 DevOps 파이프 라인에서 스크립트를 실행할 수 있습니다.

Mssql-scripter는 Python을 사용하여 작성되었으며 새로운 Azure CLI 2.0 도구의 사용성 원칙을 통합합니다. 소스 코드는 Github ( https://github.com/Microsoft/sql-xplat-cli ) 에서 찾을 수 있으며 , 여러분의 기여와 풀 요청을 환영합니다!

사용 예 :

Adventureworks 데이터베이스에서 모든 데이터베이스 개체 (기본값)에 대한 DDL 스크립트를 생성하고 stdout으로 출력

$ mssql-scripter -S localhost -d AdventureWorks -U sa

Adventureworks 데이터베이스의 모든 테이블에 대한 모든 데이터베이스 개체 및 DML 스크립트 (INSERT 문)에 대한 DDL 스크립트를 생성하고 스크립트를 파일에 저장

$ mssql-scripter -S localhost -d AdventureWorks -U sa schema-and-data  > ./output.sql

0

xSQL 스키마 비교xSQL 데이터 비교 명령 행 버전을 사용할 수 있습니다 . 명령 행 버전을 사용하면 비어있는 데이터베이스에 대한주기적인 데이터 및 스키마 비교를 예약 할 수 있으며 여기에는 항상 최신 버전의 데이터베이스에 대한 정확한 복제본을 처음부터 작성하는 스크립트가 있습니다.

공개 : 저는 xSQL에 소속되어 있습니다.


0

단지 업데이트 : 현재 버전의 SQL Server powershell 모듈 (SQL Server 2014 이상에서 SSMS 17에서 테스트 됨)에서 이러한 옵션의 대부분은 기본 명령 및 방법입니다.

예를 들어 Get-SqlDatabase.Script ().EnumScript () 와 같은 메서드를 사용할 수 있습니다 . 특히 좀 더 세분화 된 접근 방식 (특정 테이블 및 기타 개체)을 원하는 경우에는 매우 유용하고 간단합니다.

예를 들어, 사용자 정의 함수에 대한 CREATE 스크립트를 생성하여 파일에 저장합니다.

$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName

$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"

당신이 원하는 경우 스크립트 데이터 등 인덱스, 키, 트리거, 같은 및 요소는 다음과 같이 스크립팅 옵션을 지정해야합니다 :

$scriptOptions = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions

$scriptOptions.NoCollation = $True
$scriptOptions.Indexes = $True
$scriptOptions.Triggers = $True
$scriptOptions.DriAll = $True
$scriptOptions.ScriptData = $True

$Database.Tables.EnumScript($scriptOptions) | Out-File -FilePath ".\AllMyTables.sql"

Script () 메서드는 스크립팅 데이터를 지원하지 않습니다. 테이블에는 EnumScript ()를 사용하십시오.

단일 테이블 :

($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)

모든보기, 보기 당 하나의 파일 , DROP 및 CREATE 스크립트를 저장하십시오.

ForEach ($view in $($Database.Views | Where Schema -eq "dbo")) {

    "`nIF OBJECT_ID('$($view.Name)') IS NOT NULL DROP VIEW $($view.Name);`n`n" | Out-File -FilePath ".\SqlScripts\$($view.Name).sql"    
    $view.Script() | Out-File -FilePath ".\SqlScripts\$($view.Name).sql" -Append
}

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.