テーブル名・列名・データ型の一覧

※2009/11/09 SQLが間違っていたので修正しました。
※2011/12/07 参考先URLがリンク切れになったようなので別の参考先を追加しました。




DB仕様書を作るときに後々の参考になりそうなのでメモ。
SQLserverにあるシステムテーブルを用いてテーブル内の列のデータ型などを一覧表示してみる。

SELECT
	o.xtype AS TableType		--テーブルの型(U:テーブル、V:ビュー)
	,o.name AS TableName		--テーブル名
	,c.name AS ColumnName		--列名
	,t.name AS ColumnTypeName	--データ型
	,c.length AS ColumnLength	--データの長さ
	,c.isnullable AS ColumnNullOK	--null許可=1
FROM
	syscolumns as c
INNER JOIN (
		SELECT
			id
			,xtype
			,name
		FROM
			sysobjects
		WHERE
			xtype IN ('U','V')
	) AS o
	ON
		c.id = o.id
INNER JOIN (
		SELECT xtype,xusertype,type,usertype,name
		FROM systypes
	) AS t
	ON
		c.xtype = t.xtype
	AND
		c.xusertype = t.xusertype
ORDER BY
	o.name
	,c.colid


参考:

ただし、SQLserverのバージョンによって使用できない場合があるので注意。
(SQLserver2005以外では確認していません。)
そのため、上記クエリを使うよりも、こっちのシステムストアドプロシージャで確認した方が安全かもしれない。



以下メモ:
スーパーpre記法(シンタックス・ハイライト)では、指定するファイルタイプ文字列の大文字小文字を区別するので注意。
例えば上記クエリは「>|sql|〜||<」と書いているが、「>|SQL|〜||<」ではハイライトしなかった。