ネタ元:SQL Server 2008 に定義されているテーブルやビューの列情報をPowerShellで取得する方法
前エントリを応用し、DB内にあるすべてのビューの列情報をCSVに書き出すようにしてみました。
データ型によっては出さないほうが良い列情報もあるのですが、
そこはWhere-Objectコマンドレットで制御可能なので、今回はあまり気にしないで作ってみました。
また、前エントリにて、
「Format-Tableではなく、System.String.Format に相当するものを -f で指定できる」
というのを教えて頂きましたので、それらを踏まえて、下記のようにしてみました。
定義済みのView
# DB内にあるすべてのViewを取得 #$views = (Get-ChildItem SQLSERVER:\SQL\サーバー名\インスタンス名(通常はDefaultなはず)\Databases\対象DB名\Views) $views = (Get-ChildItem SQLSERVER:\SQL\37-47\MSSQLSERVER_2008+sa\Databases\SampleDb\Views) $outFileName = "c:\work\ViewDocument.csv" # Viewごとのループ foreach( $view in $views ) { "$view`r`n" | Out-File $outFileName -Append # View名を取得 # ( SQL Server がPowerShell変数を識別するために、 # "SQL Server変数=PowerShell変数" という書式で定義する。ホスト変数の定義方法の1つです) $viewname = "VIEWNAME=" + $view.Name # Viewの詳細をCSVファイルに出力する Invoke-Sqlcmd -Database "SampleDB" -Query "sp_help N'[dbo].[`$(VIEWNAME)]'" -variable $viewname | Where-Object {$_.Column_name -ne $null} | % {"{0}`t{1}({2})`t({3},{4})" -f $_.Column_name, $_.Type, $_.Length, | [System.Convert]::ToString($_.Prec).Trim(), [System.Convert]::ToString($_.Scale).Trim() } | Out-File $outFileName -Append # 次のViewへ "`r`n" | Out-File $outFileName -Append }
★実行結果
だいぶ、テーブル/ビュー定義書に必要な情報がPowerShellでそろえられるようになってきました。
今回はビューの例でやりましたが、テーブルでも同じようにできるので、参考にしてみてください。
膨大な数のテーブル/ビューの定義書を作る場合、こういうのがあると作業を効率化できますし、
また、ビューの場合、テーブルと違って、SQL Server のデザイン画面で、
各項目の型を閲覧することができませんので、今回のようなツールがあると、かなり助かると思います。
コメント