SQL Server 2008内にあるテーブルとビューの列情報をPowerShellで取得する方法をやってみました。
SQL Server の sp_help コマンドを、PowerShellのInvoke-SqlCmd コマンドレットで呼び出しています。
★テーブルやビューの列情報をPowerShellで取得する際の書式
Invoke-Sqlcmd -Database "データベース名" -Query "sp_help N'[対象スキーマ名].[対象テーブル名またはビュー名]'" |
Format-Table [表示したい項目1], [表示したい項目2]......................... -autosize
SQL Server で通常、sp_help ストアドをキックすると、下記図のように複数の結果セットが表示されます。
そのため、PowerShellで、sp_help の結果を取得するには、Format-Tableで表示する項目を指定して
あげるなど、工夫が必要です。
★サンプルに使用したテーブル
CREATE TABLE [dbo].[SampleTable](
[id] [int] IDENTITY(1,1) NOT NULL,
[column1] [nvarchar](max) NULL,
[column2] [datetime] NULL,
[column3] [numeric](18, 0) NULL,
[column4] [decimal](18, 0) NULL,
CONSTRAINT [PK_SampleTable] PRIMARY KEY CLUSTERED (
[id] ASC)WITH (
PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY])
ON [PRIMARY]
★サンプルに使用したビュー
CREATE VIEW [dbo].[SampleView]AS
SELECT
id,
column1,
column2,
column3,
column4
FROM
dbo.SampleTable
★テーブルの列情報をPowerShellで取得する使用例
Invoke-Sqlcmd -Database "SampleDB" -Query "sp_help N'[dbo].[SampleTable]'" |
Format-Table Column_name, Type -autosize
■実行結果
★ビューの列情報をPowerShellで取得する使用例
Invoke-Sqlcmd -Database "SampleDB" -Query "sp_help N'[dbo].[SampleView]'" |
Format-Table Column_name, Type -autosize
■実行結果
SQL Server の sp_helpが使用できるものであれば、テーブルだろうとビューだろうと、ストアドやファンクションであっても何でも取得できます。
★さらに上記の応用で、テーブル設計書を作りたい人は、下記のようにテーブルやビューの情報をファイル出力させることもできます。
Invoke-Sqlcmd -Database "SampleDB" -Query "sp_help N'[dbo].[SampleView]'" |
Format-Table Column_name, Type -autosize |
Out-File c:\work\SampleView.txt
■実行結果
ただ、Export-csv コマンドレットもしくはOut-Fileコマンドレットでも良いので、
綺麗に体裁を整えた設計書に近い、ファイル出力方法がないか現在模索中・・・(仕事で入り用になったため)
(いろいろと模索しはじめると、私みたいなPowerShell初心者は、頭がパニックになります orz)
少し頭を整理しないと、ダメですね・・・