ManagementStudioで出力した感じのスクリプトを作成します。
以前投稿した「全テーブルのCreate Table文を作成する」は全テーブルをまとめて1ファイルで出力しますが、これはテーブル単位にファイルを作成します。
参考にしたサイト:SQL Server PowerShell を使用した管理手法 第 2 回 実践編
CreateTable.ps1
[void][reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$serverName = "localhost"
$databaseName = "AdventureWorks"
$scriptDir = "D:\テーブル"
if (Test-Path $scriptDir) {
#追記するので既にファイルがある場合は出力ファイルを削除する
Remove-Item "$scriptDir\*"
}else{
#出力先ディレクトリがない場合は作成
mkdir $scriptDir
}
$server = New-Object Microsoft.SqlServer.Management.Smo.Server($serverName)
$db = $server.Databases[$databaseName]
$scripter = New-Object Microsoft.SqlServer.Management.Smo.Scripter($server)
#出力するスクリプトの設定
$scripter.Options.Indexes = $true #インデックスを含める
$scripter.Options.ClusteredIndexes = $true #クラスター化インデックスを含める
$scripter.Options.WithDependencies = $false #依存オブジェクトを含めない
$scripter.Options.DriAll = $true #参照整合性の出力を含める
$scripter.Options.ToFileOnly = $true #コンソール出力しない
$scripter.Options.Triggers = $true #トリガーを含める
$scripter.Options.AnsiPadding = $true #
$scripter.Options.AppendToFile = $true #ファイルに追記する
[Microsoft.SqlServer.Management.Smo.SqlSmoObject[]]$db.Tables |
%{
#データベース選択のコマンドを出力
Add-Content -Path $scriptFile -encoding Unicode -Value "USE [$databaseName]"
Add-Content -Path $scriptFile -encoding Unicode -Value "GO"
$datetime = (Get-Date).ToString("MM/dd/yyyy hh:mm:ss.fff")
$schema = $_.Schema
$tableName = $_.Name
$scripter.Options.FileName = "$scriptDir\$tableName.sql" #出力先ファイル
#Drop文を出力
Add-Content -Path $scriptFile -encoding Unicode -Value "/****** Object: Table [$schema].[$tableName] Script Date: $datetime ******/"
$scripter.Options.ScriptDrops = $true
$scripter.Script($_)
#Create文を出力
Add-Content -Path $scriptFile -encoding Unicode -Value "/****** Object: Table [$schema].[$tableName] Script Date: $datetime ******/"
$scripter.Options.ScriptDrops = $false
$scripter.Script($_)
}