Visual Studio 2008と.NET FrameworkでSQL Serverのスクリプト生成を自動化
SQL Server Management Studio (SSMS) 2008 の「スクリプトの生成」タスクは、データベースオブジェクトのDDL (Data Definition Language) スクリプトを生成する便利な機能です。しかし、このタスクを手動で繰り返し実行するのは面倒です。そこで、このタスクを自動化する方法を紹介します。
方法
SSMS 2008 で「スクリプトの生成」タスクを自動化する方法はいくつかあります。ここでは、以下の 2 つの方法を紹介します。
SSMS には、マクロ機能を使ってタスクを自動化できる機能があります。この機能を使って、「スクリプトの生成」タスクを自動化するには、以下の手順を行います。
- SSMS で ツール メニューから マクロ > 新しいマクロの記録 を選択します。
- マクロの名前と説明を入力します。
- 記録の開始 をクリックします。
- オブジェクトエクスプローラーで、スクリプトを生成したいデータベースオブジェクトを選択します。
- 右クリックして タスク > スクリプトの生成 を選択します。
- スクリプトの生成とパブリッシュ ウィザードで、必要なオプションを選択します。
- マクロの記録を停止します。
マクロの記録が完了したら、ツール メニューから マクロ > マクロの実行 を選択して、マクロを実行できます。
PowerShell スクリプトを使う
PowerShell は、Windows のコマンドラインシェルです。PowerShell スクリプトを使って、「スクリプトの生成」タスクを自動化するには、以下の手順を行います。
- PowerShell を起動します。
- 以下のコマンドを実行します。
# SQL Server Management Studio オブジェクトへの接続
$sqlserver = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList 'localhost'
# データベースへの接続
$database = $sqlserver.Databases['YourDatabaseName']
# スクリプトの生成
$script = $database.GenerateScript()
# スクリプトの保存
$script | Out-File 'C:\Temp\script.sql'
このコマンドは、$script
変数にスクリプトの内容を格納し、C:\Temp\script.sql
ファイルに保存します。
その他の方法
上記以外にも、以下の方法で「スクリプトの生成」タスクを自動化できます。
- T-SQL スクリプトを使う
- SSIS パッケージを使う
- サードパーティ製のツールを使う
注意事項
- SSMS のマクロ機能を使う場合は、マクロのセキュリティに注意する必要があります。
- PowerShell スクリプトを使う場合は、PowerShell のセキュリティに注意する必要があります。
- スクリプトを実行する前に、必ず内容を確認してください。
補足
- 上記の方法は、SQL Server 2008 R2 でも使用できます。
- SSMS 2012 以降では、データのエクスポート/インポート ウィザードを使って、データベースオブジェクトのスクリプトを生成できます。
-- マクロの名前: GenerateScript
-- マクロの説明: 選択したデータベースオブジェクトのDDLスクリプトを生成します。
-- オブジェクトエクスプローラーで選択したオブジェクトを取得します。
$selectedObjects = $host.ui.activeWindow.selection.getSelectedObjects()
-- 選択したオブジェクトのDDLスクリプトを生成します。
foreach ($object in $selectedObjects) {
$script = $object.GenerateScript()
-- スクリプトを表示します。
$host.ui.write($script)
-- スクリプトをファイルに保存します。
$script | Out-File 'C:\Temp\script.sql'
}
# SQL Server Management Studio オブジェクトへの接続
$sqlserver = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList 'localhost'
# データベースへの接続
$database = $sqlserver.Databases['YourDatabaseName']
# テーブルのリストを取得
$tables = $database.Tables
# 各テーブルのDDLスクリプトを生成して保存
foreach ($table in $tables) {
$script = $table.GenerateScript()
$script | Out-File "C:\Temp\$table.Name.sql"
}
USE YourDatabaseName
GO
EXEC sp_helptext 'TableName'
GO
- SSIS を起動して、新しいプロジェクトを作成します。
- データソースタスクを追加して、SQL Server データベースに接続します。
- データフロータスクを追加して、OLE DB ソース コンポーネントと ファイルシステム出力 コンポーネントを接続します。
- OLE DB ソース コンポーネントの SQL クエリ プロパティに、以下のクエリを入力します。
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
- ファイルシステム出力 コンポーネントの ファイル名 プロパティに、スクリプトファイルを保存する場所とファイル名を入力します。
- パッケージを実行します。
- ApexSQL Script
- Redgate SQL Doc
- dbForge Schema Compare for SQL Server
- 上記のサンプルコードは、あくまでも参考です。実際の環境に合わせて修正する必要があります。
SQL Server Management Studio 2008 で「スクリプトの生成」タスクを自動化するその他の方法
Visual Studio 2008 のマクロ機能を使って、「スクリプトの生成」タスクを自動化できます。この方法は、SSMS のマクロ機能を使う方法と似ていますが、Visual Studio 2008 を使用している必要があります。
.NET Framework を使って、「スクリプトの生成」タスクを自動化できます。この方法は、より高度な方法ですが、.NET Framework の知識が必要です。
上記で紹介したツール以外にも、さまざまなサードパーティ製のツールを使って、「スクリプトの生成」タスクを自動化できます。
sql-server visual-studio-2008 automation