はじめまして、私、けろ-みお と申します。

元々、管理人の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

にもクロスポストしています。予めご了承ください。

 


Posted in: PowerShell , その他  Tags:

現在のレート 5.0 (2人)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

コメント

2008/10/20 1:38:52

はじめまして

今まで SQL Server 2008 に大した興味なかったけど、PowerShell で簡単に扱えるとなると魅力的です。
SQL Server 2008 使う時は PowerShell 活用したいと思います。

YokoKen jp

2008/10/20 8:07:17

>よこけんさん

はじめまして!どうぞ、宜しくお願いします!
SQL ServerでPowerShellを使えるメリットとして
階層イメージでサーバー、DB、テーブル、
各サービス(AgentやMailなど)にアクセスできる点ですね。
cd SQLSERVER:\SQL\[サーバー名]\[SQLServerサービスインスタンス名]\Databases\[DB名]
とした後、DIRとかやるとテーブルの一覧を簡単に列挙できたりするので便利です。
過去のSQL ServerでPowerShellがなかった時代は、
こんなに簡単にテーブルの一覧を列挙することはできませんでしたので、
それだけでも価値はあると思っています。

元々、Web開発系の人間なのでPowerShellは本当ど素人ですが、
今後ともよろしくお願いします。

kero_mio jp

2008/10/20 8:29:53

けろ-みおさん
投稿ありがとうございます。

待ってましたSQL-Serverネタ。
ネット上でSQL-Server + PowerShellに書かれた記事はまだほとんどないですから、とても貴重です。しかもわかりやすいです。(SQL-Serverど素人の自分にも理解できました)

これは関数化しておくといいかもしれませんね。
そうすればいろんなバッチからの呼び出しにも使えそうですし、ちょっとテーブル作りたいときなんかにも便利そう。

またSQL-Serverネタ(それ以外も)お願いします。

HIRO

2008/10/20 8:45:15

>HIROさん

IDをもらってからだいぶ経つのに、投稿が遅くなってしまってすいませんでした。
確かに日本ではまだPowerShell + SQL Serverの組み合わせで実装された記事って
少ないですよね。ググってみてビックリしました。

それから、こういったコードは汎用的なコマンドレットとして関数化しておくと
いいかもしれませんね。
他にもPowerShellがあったからこそ、SQLServerで便利に使えるようになった機能が
たくさんあるので、時間を見てPowerShell from Japan!!にも記事を投函したいと
思います。どうぞ宜しくお願いします!

kero_mio jp

コメントを書く


 

  Country flag

biuquote
  • コメント
  • プレビュー
Loading



Calendar

«  1月 2009  »
月曜火曜水曜木曜金曜土曜日曜
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678
View posts in large calendar

Recent Posts

Recent Comments

Banners

Theme Grabber
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2009 PowerShell from Japan!!