web-dev-qa-db-ja.com

SQL Server 2012:コマンドラインからスクリプトを生成する

SQL Server 2012を実行しています。

SQL Server Management Studioには、データベースを右クリックして[タスク]と[スクリプトの生成]を選択するオプションがあります。

コマンドラインを介して何らかの方法でそれを自動化する方法はありますか?

データベース全体のスキーマとデータを含むスクリプトを作成したいと思います。

ScriptDBsqlpubwiz.exeなどのツールはすべてSQL Server 2005をターゲットにしているようです。SQLServer 2012はどうですか?

21
Harald

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

サードパーティのツールについては、チェックアウトすることを強くお勧めします(そこにはサードパーティのツールがたくさんありますが、以下で私が使用したものは素晴らしいものです):

21
Kin Shah

MicrosoftのTara Raj は最近、Microsoft SQLチームが T-SQLスクリプトを生成するコマンドラインツールのセット をリリースしたことを発表しました。

mssql-scripter

Mssql-scripterは、広く使用されている生成スクリプトに相当するマルチプラットフォームのコマンドラインですWizard 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

すべてのデータベースオブジェクトのDDLスクリプトと、AdventureworksデータベースのすべてのテーブルのDMLスクリプト(INSERTステートメント)を生成し、スクリプトをファイルに保存します。

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

これを行う SchemaZen という名前のオープンソースコマンドラインユーティリティを作成しました。これは、management studioからのスクリプト作成よりもはるかに高速で、出力はバージョン管理に対応しています。スキーマとデータの両方のスクリプトをサポートしています。

スクリプトを生成するには、以下を実行します。

schemazen.exeスクリプト--server localhost --database db --scriptDir c:\ somedir

次に、スクリプトからデータベースを再作成するには、次のコマンドを実行します。

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

単なる更新: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()を使用します。

A 単一のテーブル

($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
}

お役に立てれば。

1
Victor Lopes

xSQL Schema Compare および xSQL Data Compare のコマンドラインバージョンを使用できます。コマンドラインバージョンを使用すると、空のデータベースに対する定期的なデータとスキーマの比較をスケジュールできます。これには、データベースの最新バージョンの正確なレプリカを最初から構築するスクリプトが常にあります。

開示:私はxSQLに所属しています。

0
Endi Zhupani