小物SEのメモ帳

IT関係の試したことや調べたことの備忘録

【SQL Server】接続しているDB内のすべてのテーブルの定義情報を抽出する

SQLServerにおいて、すべてのテーブルの定義情報をまとめて取得する際にお手軽に取得できるクエリです。
sp_Msforeachtableはundocumentedなストアドプロシージャですが、すべてのテーブルに対し、処理を実行してくれるため何かと便利です。

sp_MSforeachtable @command1 = "sp_help '?'"

f:id:utiowa:20170131231016p:plain


尚、事前に以下手順で出力をファイル形式かつタブ区切りにしておくとエクセルに貼り付けやすくてよいかと思います。

①クエリエディタ上で右クリックを押下して、「結果の出力(R)」-「結果をファイルに出力」を選択。
f:id:utiowa:20170131231032p:plain

②クエリエディタ上で右クリックを押下し、「クエリオプション」を選択。
f:id:utiowa:20170131231044p:plain

③左ペインの「結果」配下の「テキスト」を選択し、出力形式(O)で”タブ区切り”を選択して「OK」を押下。
f:id:utiowa:20170131231054p:plain

あとはクエリを実行すると出力先を決めることができるので、保存すればよいかと。
f:id:utiowa:20170131231102p:plain


ちなみにテーブルおよびインデックスのDDLをすべて出力したいこともあるかと思います。
こちらに関しては、GUI操作に出力が簡単です。

①左ペインのオブジェクトエクスプローラでデータベースを選択し、右クリックを押下し、「タスク(T)」-「スクリプトの生成(E)」を選択。
f:id:utiowa:20170131231113p:plain

②次へを押下。
f:id:utiowa:20170131231123p:plain

③「テーブル」にチェックをいれます。
※今回はテーブル情報の出力ですが、ここでは下記のようにストアドプロシージャなども出力可能です。
f:id:utiowa:20170131231130p:plain


④以下に応じて選択します。
全テーブルで1ファイルとしたければ、「生成するファイル」を単一ファイル
1テーブルごとに1ファイルとしたければ、「生成するファイル」をオブジェクトごとに1つのファイル
f:id:utiowa:20170131231139p:plain


また、詳細設定(A)を選択すると下記のような出力オプションが選ぶことができます。
今回は、インデックスのスクリプトを作成をFalse⇒Trueとして実行してみます。
f:id:utiowa:20170131231156p:plain
f:id:utiowa:20170131231202p:plain

出力したファイルは下記のようなものとなります。
f:id:utiowa:20170131231210p:plain