はじめまして、私、けろ-みお と申します。
元々、管理人の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
にもクロスポストしています。予めご了承ください。
コメント
はじめまして
今まで SQL Server 2008 に大した興味なかったけど、PowerShell で簡単に扱えるとなると魅力的です。
SQL Server 2008 使う時は PowerShell 活用したいと思います。
>よこけんさん
はじめまして!どうぞ、宜しくお願いします!
SQL ServerでPowerShellを使えるメリットとして
階層イメージでサーバー、DB、テーブル、
各サービス(AgentやMailなど)にアクセスできる点ですね。
cd SQLSERVER:\SQL\[サーバー名]\[SQLServerサービスインスタンス名]\Databases\[DB名]
とした後、DIRとかやるとテーブルの一覧を簡単に列挙できたりするので便利です。
過去のSQL ServerでPowerShellがなかった時代は、
こんなに簡単にテーブルの一覧を列挙することはできませんでしたので、
それだけでも価値はあると思っています。
元々、Web開発系の人間なのでPowerShellは本当ど素人ですが、
今後ともよろしくお願いします。
けろ-みおさん
投稿ありがとうございます。
待ってましたSQL-Serverネタ。
ネット上でSQL-Server + PowerShellに書かれた記事はまだほとんどないですから、とても貴重です。しかもわかりやすいです。(SQL-Serverど素人の自分にも理解できました)
これは関数化しておくといいかもしれませんね。
そうすればいろんなバッチからの呼び出しにも使えそうですし、ちょっとテーブル作りたいときなんかにも便利そう。
またSQL-Serverネタ(それ以外も)お願いします。
>HIROさん
IDをもらってからだいぶ経つのに、投稿が遅くなってしまってすいませんでした。
確かに日本ではまだPowerShell + SQL Serverの組み合わせで実装された記事って
少ないですよね。ググってみてビックリしました。
それから、こういったコードは汎用的なコマンドレットとして関数化しておくと
いいかもしれませんね。
他にもPowerShellがあったからこそ、SQLServerで便利に使えるようになった機能が
たくさんあるので、時間を見てPowerShell from Japan!!にも記事を投函したいと
思います。どうぞ宜しくお願いします!