はじめまして、私、けろ-みお と申します。
元々、管理人のHIROさんとは長い付き合いでして、
techbank.jp / techbank.jp コミュニティ! というところでも一緒にコミュニティ運営しております。
この度、SQL Server 2008 で標準搭載されたPowerShellを実践でも活用して頂きたく思い、初投稿することにしました。
元々、私の専門がASP/ASP.NET、SQLServerなもので、まだまだPowerShellは不慣れですが、どうぞ皆様宜しくお願いします。
◆PowerShellを使ってSQL Server 2008上にDB(データベース)を作成する
###################################################################
# 新しいDBを作成する
###################################################################
$NewDb = New-Object [Microsoft.SqlServer.Management.SMO.Database]
$NewDb.Parent = (Get-Item SQLSERVER:\SQL\[サーバー名]\[SQLServerサービスインスタンス名])
$NewDb.Name = "[新しく作成したいDB名]"
$NewDb.Create()
###################################################################
# []内は環境に応じて変えて下さい。(その際、[]の文字部分も不要)
# [サーバー名]は、localhostなどのSQLServerがインストールされているマシン名かIPアドレス
# [SQLServerサービスインスタンス名]は、「MSSQLSERVER」等の名前
# [新しく作成したいDB名]は、新規作成したいDB名を任意で入れてください。
###################################################################
実行結果:
◆PowerShellを使って、SQL Server 上に簡単なテーブルを作成してみよう!
###################################################################
# 新しいテーブルを作成する
###################################################################
$table = New-Object Microsoft.SqlServer.Management.Smo.Table
$table.Parent = (Get-Item SQLSERVER:\SQL\[サーバー名]\[SQLServerサービスインスタンス名]\Databases\[DB名])
$table.Name = "NewTableName"
###################################################################
# 作成するテーブル列を作成する
# (必ずNameプロパティで列名を定義してから、DataTypeプロパティで列の型を定義すること!
# そうしないと
# 「"DataType" の設定中に例外が発生しました: "列 '' のDataType の設定に失敗しました。"」
# とエラーになる)
###################################################################
# int型の列を作成する
$column1 = New-Object Microsoft.SqlServer.Management.Smo.Column
$column1.Parent = $table
$column1.Name = "column1"
$column1.DataType = ([Microsoft.SqlServer.Management.Smo.DataType]::Int)
# 作成した列をテーブルに追加
$table.Columns.Add($column1)
# nvarchar型の列を作成する
$column2 = New-Object Microsoft.SqlServer.Management.Smo.Column
$column2.Parent = $table
$column2.Name = "column2"
$column2.DataType = ([Microsoft.SqlServer.Management.Smo.DataType]::NVarChar(100))
# 作成した列をテーブルに追加
$table.Columns.Add($column2)
# テーブル作成実行
$table.Create()
実行結果:
◆PowerShellを使って、主キーや項目のNULL制御されているきちんとしたテーブルをSQLServer上に作成してみよう!
###################################################################
# 主キーやNOT NULL項目ありのテーブルを作成する
###################################################################
$table = New-Object Microsoft.SqlServer.Management.Smo.Table
$table.Parent = (Get-Item SQLSERVER:\SQL\[サーバー名]\[SQLServerサービスインスタンス名]\Databases\[DB名])
$table.Name = "NewTableName2"
# まずはテーブルに追加する列を作成する
$column1 = New-Object Microsoft.SqlServer.Management.Smo.Column
$column1.Parent = $table
$column1.Name = "column1"
$column1.DataType = ([Microsoft.SqlServer.Management.Smo.DataType]::Int)
# 列はNULLを許可しないよう設定
$column1.Nullable = ([System.Boolean]::false)
# IDENTITYに対応させる(1から自動採番されるよう列を設定する)
$column1.IdentitySeed = 1
$column1.IdentityIncrement = 1
# 作成した列をテーブルに追加
$table.Columns.Add($column1)
# 主キーを作成する
$index = New-Object Microsoft.SqlServer.Management.Smo.Index
$index.Parent = $table
$index.Name = "PK_NewTable2"
# 主キーとして認識させるためにClustered Indexを作成する
$indexedColumn = New-Object Microsoft.SqlServer.Management.Smo.IndexedColumn
$indexedColumn.Parent = $index
$indexedColumn.Name = "column1"
# Clustered Indexを適用する
$index.IndexedColumns.Add($indexedColumn)
$index.IndexKeyType = ([Microsoft.SqlServer.Management.Smo.IndexKeyType]::DriPrimaryKey)
# 作成したClustered Indexをテーブルに追加
$table.Indexes.Add($index)
# テーブルを作成する
$table.Create()
実行結果:
◆まとめ
Microsoft.SqlServer.Management.Smoアセンブリ&名前空間の使い方がわかれば、
PowerShellじゃなくても活用はできると思いますが、 バッチ処理でDBやテーブルを作成しなきゃいけないとか、
ちょっとしたツールとしてDBを作らなきゃいけないとかそういった場合、
PowerShellコマンドレットで処理させると、 実務での活用どころも期待できると思っています。
どうぞお役立て頂きたく存じます。
◆その他
同様の記事を自身のBlog
http://techbank.jp/Community/blogs/mymio/default.aspx
にもクロスポストしています。予めご了承ください。