シリーズ目次
前置き
SQLSERVERでは下図のように、メニューからテーブルのCreateスクリプトを出力することができます。データベース>(出力したいテーブルがあるデータベース)を右クリック>タスク>スクリプトの生成
しかし、Gitでソース管理するときに、こんなの毎回画面からやってたらめんどくさくてしょうがないのです。
コマンド一発で出せるようにしておきたいのです。
PowerShellでテーブルCreateスクリプトを出力
んで調べてみたところ、Microsoftさんはちゃんと用意してくれてました。https://docs.microsoft.com/ja-jp/sql/relational-databases/server-management-objects-smo/tasks/scripting?view=sql-server-ver15
今回はPowerShellでやってみます、といってもほぼ写経ですがw
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cd C:\data_converter | |
$strServer = $env:COMPUTERNAME + "\SQLEXPRESS" | |
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server($strServer); | |
$db = $server.Databases["data_convert_from"] | |
$scripter = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Scripter | |
$scripter.Server = $server | |
$scripter.Options.ToFileOnly = $true | |
$scripter.Options.AnsiPadding = $true | |
foreach ($table in $db.Tables) | |
{ | |
$filePath = "C:\data_converter\" + $table.Name + ".sql" | |
$scripter.Script($table) > $filePath | |
} |
Scripterの引数には各tableオブジェクトを突っ込むのですが、SMOからdatabaseオブジェクトを経由して、tablesオブジェクトを取得できます。あとはforeachで回すだけ。
できあがったファイルを見てみましょう。
Accessテーブルをインポートしたまんまなので、テーブル定義自体はかなり適当になっちゃってますが、んーちゃんとできてますね!
ちなみにC#でも同様のことができ、実務ではそちらを使いました。DLLにしてpowershellから実行です。
C#、VBA、powershellあたりは、すべて使い回しが効くから便利ですね!!
0 件のコメント:
コメントを投稿