【SQLServer】フィールド情報の取得

テーブル情報の取得と同じように、SYS***関連のテーブルを結合することで取得できます。
得たい情報によって結合するSYS***が変わりますが、大体こんな感じになるんじゃないかなと思います。
少々長いですが、フィールドの方向やIDENTITYかどうかも取得できるようになっています。
必要に応じて追加・削除してくださいまし。

SELECT 
  CAST(A.NAME AS VARCHAR(40)) AS FIELD_NAME, 
  CAST(C.NAME AS VARCHAR(20)) AS FIELD_TYPE, 
  CASE WHEN A.STATUS & 8 = 8 THEN 1 ELSE 0 END AS DIRECTION_INPUT,
  CASE WHEN A.STATUS & 64 = 64 THEN 1 ELSE 0 END AS DIRECTION_OUTPUT,
  CASE WHEN A.STATUS & 128 = 128 THEN 1 ELSE 0 END AS IS_IDENTITY,
  A.LENGTH AS FIELD_SIZE, 
  CASE WHEN E.COLID IS NULL THEN '0' ELSE '1' END AS PK_FLAG, 
  A.NUMBER AS PROCEDURE_NO 
FROM 
  SYSCOLUMNS AS A 
  INNER JOIN SYSOBJECTS AS B ON B.ID = A.ID 
  INNER JOIN SYSTYPES AS C ON C.XUSERTYPE = A.XTYPE 
  LEFT JOIN SYSINDEXES AS D ON D.ID = A.ID 
      AND D.STATUS & 2048 <> 0 
  LEFT JOIN SYSINDEXKEYS AS E ON E.ID = D.ID 
      AND E.INDID = D.INDID 
      AND E.COLID = A.COLID 
WHERE 
  B.NAME = '対象テーブル名' 
ORDER BY 
  A.NUMBER, 
  A.COLID

このSQLでは、テーブル以外にもストアドの情報まで取れるようになっています。
PROCEDURE_NOが1以上のときは、ストアドで使用される項目となります。

投稿者: ♪ 日時: 2006年07月12日 11:16 このエントリーをはてなブックマークに追加 このエントリーをYahoo!ブックマークに登録 Save This Page to del.icio.us このエントリーをlivedoorクリップに追加 このエントリーをニフティクリップに追加 このエントリーをBuzzurlに追加このエントリーをBuzzurlに追加 このエントリーをBlogPeople Tagsに追加 このエントリーをBlogPeople Instant Bookmarkに追加 このエントリーをPingKingポッケに追加 このエントリーをFC2ブックマークへ追加 このエントリーをnewsingへ追加 Yahoo!ブックマークでこのサイトを登録している人数 人が登録

トラックバック

このエントリーのトラックバックURL:
http://magicbox.sakura.ne.jp/mt/mt-tb.cgi/73

このリストは、次のエントリーを参照しています: 【SQLServer】フィールド情報の取得:

» PropertyGrid(System.Windows.Forms.PropertyGrid)
from 主婦と.NETと犬のぶろぐ

PropertyGrid(System.Windows.Forms.PropertyGrid) [詳しくはこちら]
トラックバック時刻: 2007年03月20日 10:37

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)