- PR -

SQLServer2000におけるテーブルデザインからの定義ファイル作成について

1
投稿者投稿内容
こんどる
常連さん
会議室デビュー日: 2004/05/10
投稿数: 30
投稿日時: 2004-07-27 18:51
こんにちは。質問させていただきます。

 現在、SQL Server 2000 Enterprise Editionを使用しており、
Enterprise Managerを使用してテーブルのデザインを編集しています。

ここで、各フィールドの説明や規定値などを入れる欄があると思うのですが、
せっかくここに記述した説明などを定義ファイル(CSVやExcelなど)に落とすことが出来ません。
出来てもよさそうなのでいろいろ試してみたのですが、ダメでした。。
どなたか方法をご存知でしたら教えていただけませんでしょうか。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-07-28 10:19
こんにちは。

「定義ファイルに落とす」とはどのような操作をおこなってのものでしょうか?
「SQLスクリプトの生成」であれば、「拡張プロパティを含める」というオプションにチェックすれば説明部分はスクリプトに出力されます。(規定値はデフォルトで出力されると思うけど)

しかし「CSVやExcel」といっているので違うのかな?。。。
こんどる
常連さん
会議室デビュー日: 2004/05/10
投稿数: 30
投稿日時: 2004-07-28 10:31
返信有難うございます。

やりたいことはただ、テーブル定義書を簡単に作れないものかなということです。
せっかくEnterPriseManagerにフィールドの型や長さ、規定値や説明まで書いたのに、
Excelなどで改めてテーブル定義書を書きたくないなと思い、
「テーブル定義をExcelにエクスポート」のような機能を探していたのです。

本来は、定義書(設計書)を作成してから実際のテーブルを作成するべきですが、
ついつい作りこんだ後に設計書を書いてしまっています。。。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-07-28 11:03
なるほど、そういうことでしたか。
しかし、自分の知っている限りそのような機能はSQLServer2000には無いですな。。。残念
(テーブル仕様書を出力できたら便利そうですね)

やるんだったら自分で作ってみるのもいいかもしれません。
テーブルのフィールド情報はsyscolumnsシステムテーブルから取得できるし、型情報もsystypesから取得できます。ただし説明部分は拡張プロパティになっているんで、fn_listextendedproperty関数を使用しなければいかないかな?

-- 列情報を取得するクエリー
select * from syscolumns where id = object_id('テーブル名') order by colorder

-- 型一覧
select * from systypes

-- 拡張プロパティー
SELECT * FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', 'テーブル名', 'column', default)

これらの組み合わせで何とかなるかもしれない。。ならないかもしれない。。。<をい
ごー
ベテラン
会議室デビュー日: 2003/08/29
投稿数: 51
お住まい・勤務地: いるかホテル
投稿日時: 2004-07-28 11:11
こんにちは。ごーです。
システムテーブルにはデータベースに定義したテーブル、列などの情報が格納されていますので
このテーブルから目的のものが取得出来るかと思います。
以前、自分も同じようなことをやったことがあるのでそのときのSQLが下のものです。
足りない項目もシステムテーブルから取得できると思いますので、探してみてください。

追記
noderaさんとかぶっちゃった。

(SQL例)
select Col.name,
(Select top 1 name From systypes Where systypes.xtype = Col.xtype) as type,
Col.length,
Col.scale,
Col.isnullable,
Isnull((select top 1 value from sysproperties as pro Where Pro.id = col.id and colid = smallid),'') as exp
From syscolumns as col
inner join sysobjects as obj on col.id = obj.id
Where obj.name = 'テーブル名' --ここを任意のテーブルに置き換えてください。

[ メッセージ編集済み 編集者: ごー 編集日時 2004-07-28 11:13 ]
こんどる
常連さん
会議室デビュー日: 2004/05/10
投稿数: 30
投稿日時: 2004-07-28 11:31

noderaさん、ごーさん有難うございました。

お二人のおっしゃっているようなSQLにて見事取得することが出来ました。
これで簡単なツールでも作ることにします。

有難うございました☆
無名tiger
常連さん
会議室デビュー日: 2008/04/18
投稿数: 36
投稿日時: 2008-04-28 18:24
テーブル定義書エクスポーターというツールがあります。

テーブル定義書作成の機能しかない。
Oracle、SQL Server、PostgreSQL、MySQL対応。

フリーソフトとシェアウェア 両方あります。

http://unicasoft.jp/tde/
1

スキルアップ/キャリアアップ(JOB@IT)