回答:
Powershellを使用することをお勧めします-頻繁に使用する場合。PowershellおよびSMO による自動スクリプト生成を参照できます。
また、Powershellを使用する場合、SQL Server PowerShell Extensions(SQLPSX)は非常に価値があります。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-scripter
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 Schema CompareおよびxSQL Data Compareのコマンドラインバージョンを使用できます。コマンドラインバージョンを使用すると、空のデータベースに対する定期的なデータとスキーマの比較をスケジュールできます。これには常に、データベースの最新バージョンの正確なレプリカを最初から作成するスクリプトが含まれています。
開示:xSQLに所属しています。
単なる更新:現在のバージョンのSQL Server PowerShellモジュール(SQL Server 2014以降、私は信じていました。SSMS17でテスト済み)では、これらのオプションのほとんどはネイティブのコマンドとメソッドです。
たとえば、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)
すべてのビュー、各ビューごとに1つのファイルを保存、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
}
お役に立てれば。