http://www.blogjava.net/bukebushuo/archive/2008/07/05/212794.html
最近在研究根據表結構產生Java檔案的工具,
在取得表的欄位時如何取得表的各種資訊和注釋,
這個問題困擾了我,經多方搜尋找到如下資料備用:
Oracle:
user_tab_comments;表注釋
user_col_comments;表欄位注釋
以上兩個只能擷取自己使用者的表的注釋資訊,如果要訪問自己能夠訪問的其他使用者的表,則需要使用:
all_tab_comments;表注釋
all_col_comments;表欄位注釋
當然,如果有DBA許可權,則可以使用
dba_tab_comments;表注釋
dba_col_comments;表欄位注釋
dba*和all*最好指定owner條件。user*沒有該欄位
MSSQL:
select b.[value]
from syscolumns a left join sysproperties b on a.id=b.id
and a.colid=b.smallid inner join sysobjects c on a.id=c.id
and a.[name]='列名' and c.[name]='表名'
SELECT
表名=case when a.colorder=1 then d.name else '' end,
表說明=case when a.colorder=1 then isnull(f.value,'') else '' end,
欄位序號=a.colorder,
欄位名=a.name,
標識=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
主鍵=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) then '√' else '' end,
類型=b.name,
佔用位元組數=a.length,
長度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
小數位元=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
允許空=case when a.isnullable=1 then '√'else '' end,
預設值=isnull(e.text,''),
欄位說明=isnull(g.[value],'')
FROM syscolumns a
left join systypes b on a.xusertype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sysproperties g on a.id=g.id and a.colid=g.smallid
left join sysproperties f on d.id=f.id and f.smallid=0
--where d.name='orders' --如果只查詢指定表,加上此條件
order by a.id,a.colorder