- PR -

SQLserverで既存のdatabaseからcreate table文を抽出したい

1
投稿者投稿内容
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-07-29 19:06
どもです。がるです。
ちとSQLserverで分からないことがあるので質問です。

とあるSQLserver(SQLserver2000)がありまして。ちとその中身を
解析しなければいけないのですが。
なにぶん、大量のテーブルがあって少々難航しております。

で、諸所の事情から「Linux経由でのアクセスのみ」という状況下なので、
どうしても全てを「SQL文で」解決する必要がある、ってのがまた
頭痛のネタのなっております ;;
# 最悪は直接Windowsマシンを触れなくもないのですが、可能な限り
# SQLで行いたい状況になってます

SQLserverで、以下のようなイメージのことは出来るのでしょうか?
もし可能であれば、方法か、或いは方法が分かる情報へのポインタを
教えていただければとてもありがたいです。

1.テーブル名の取り出し
あるdatabaseに属している、全てのテーブル名を一覧できるようなSQL文
はありますでしょうか?
イメージとしては、例えば
SELECT テーブル名 FROM database.マスターテーブル;
みたいなイメージを考えております。

2.create table 文の取り出し
これをSQLでやるのは無茶かなぁ…と思っているのですが。
テーブル名を指定すると、そのテーブルのcreate table文が文字列で
帰ってくる、みたいなことは可能でしょうか?

多分、ほかに方法がなければ「GUI画面から人力でメモる」のが確実
だとは思うのですが。
もし可能なら「プログラムで処理できるとなぁ」とか考えておりまして。

SQLserverにお詳しい方のお知恵をお借りできれば幸いです。


momotaro
会議室デビュー日: 2003/07/23
投稿数: 14
投稿日時: 2004-07-29 19:36
こんばんわ。
とりあえず1番のみですが・・・。
SELECT name FROM [データベース名]..sysobjects WHERE type = 'U'
でテーブル名の一覧は取得できるはずです。
2番はsyscolumnsテーブルとかsysindexテーブルなどを一緒に使えば出来そうな気がします・・・。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-07-29 19:39
がるがるさん、こんばんは。

引用:

1.テーブル名の取り出し


「SQL Server Books Online」がお手元にあれば、「システムテーブル」について調べてみて下さい。

引用:

2.create table 文の取り出し


システムテーブルからデータベースオブジェクトの情報が取得出来れば、それを元に CREATE 文を生成する、という事もできると思いますが、SQL Server 付属の管理ツール「SQL Server Enterprise Manager」を使えば、複数テーブルの生成スクリプトを一括で吐き出せたりします。
ラフィン
ぬし
会議室デビュー日: 2002/05/23
投稿数: 809
お住まい・勤務地: 外野
投稿日時: 2004-07-29 19:47
1.テーブル名の取り出し
 そのdatabaseに接続した状態で
 select id,name from sysobjects where type = 'U'

2.create table 文の取り出し
 列名と属性をひっぱってくるくらいなら、syscolumnsとsystypesから。
 syscolumnsのidを1.で取得したidで絞り、colidでソート。systypesとのJOINはusertypeで。
 ひっぱるのはsyscolumnsのcolid,name,prec,scale,length、systypesのnameくらい?
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2004-07-30 15:03
どもです。がるです。

みなさま、どうもありがとうございました。大体やり方が見えて
きました。
多分近々実際にSQL叩いたりするので、また成果など出てきたら
Upしたいと思います。

それでは、取り急ぎ御礼まで。

ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-11-02 11:06
ストアドプロシージャ
1

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