답변:
가장 자주 사용하는 경우 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
타사 도구의 경우 체크 아웃하는 것이 좋습니다 (많은 타사 도구가 있지만 아래에서 사용한 도구가 많으며 훌륭합니다).
SchemaZen 이라는 오픈 소스 명령 줄 유틸리티를 작성했습니다 . 관리 스튜디오의 스크립팅보다 훨씬 빠르며 출력은 버전 관리가 더 쉽습니다. 스키마와 데이터 스크립팅을 모두 지원합니다.
스크립트를 생성하려면 다음을 실행하십시오.
schemazen.exe 스크립트 --server localhost --database db --scriptDir c : \ somedir
그런 다음 스크립트에서 데이터베이스를 다시 작성하려면 다음을 실행하십시오.
schemazen.exe create --server localhost --database db --scriptDir c : \ somedir
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
xSQL 스키마 비교 및 xSQL 데이터 비교 명령 행 버전을 사용할 수 있습니다 . 명령 행 버전을 사용하면 비어있는 데이터베이스에 대한주기적인 데이터 및 스키마 비교를 예약 할 수 있으며 여기에는 항상 최신 버전의 데이터베이스에 대한 정확한 복제본을 처음부터 작성하는 스크립트가 있습니다.
공개 : 저는 xSQL에 소속되어 있습니다.
단지 업데이트 : 현재 버전의 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
}
도움이 되었기를 바랍니다.