14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

全テーブルのCreate Table文を作成する(テーブル単位)

Posted at

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($_)
}
14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?