原文:https://www.cnblogs.com/qianjinyan/p/9636535.html
----1. 獲取所有的數據庫名----- SELECT NAME FROM MASTER.DBO.SYSDATABASES ORDER BY NAME -----2. 獲取所有的表名------ SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME --XTYPE='U':表示所有用戶表; --XTYPE='S':表示所有系統表; SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U' AND SYSSTAT = '83' ----注意:一般情況只需要TYPE = 'U',但有時候會有系統表混在其中(不知道什么原因),加上后面一句后就能刪除這些系統表了。 ----3.獲取所有字段名----- SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('BCUSTOMER'); SELECT SYSCOLUMNS.NAME,SYSTYPES.NAME,SYSCOLUMNS.ISNULLABLE,SYSCOLUMNS.LENGTHFROM SYSCOLUMNS, SYSTYPES WHERE SYSCOLUMNS.XUSERTYPE = SYSTYPES.XUSERTYPE AND SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER'); /*注意點: ----(A)這里為了重點突出某些重要內容,選取了其中幾項信息輸出。 (B)SYSCOLUMNS表中只含有數據類型編號,要獲取完整的名字需要從SYSTYPES表中找,一般用戶使用的數據類型用XUSERTYPE對應比較好,不會出現一對多的情況。 (C)SYSCOLUMNS.LENGTH得到的是物理內存的長度,所以NVARCHAR和VARCHAR等類型在數據庫中的顯示是這個的一半。*/ ----4、得到表中主鍵所包含的列名------ SELECT SYSCOLUMNS.NAME ,SYSOBJECTS.XTYPE FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEXKEYS WHERE SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER') AND SYSOBJECTS.XTYPE = 'PK' AND SYSOBJECTS.PARENT_OBJ = SYSCOLUMNS.ID AND SYSINDEXES.ID = SYSCOLUMNS.ID AND SYSOBJECTS.NAME = SYSINDEXES.NAME AND SYSINDEXKEYS.ID = SYSCOLUMNS.ID AND SYSINDEXKEYS.INDID = SYSINDEXES.INDID AND SYSCOLUMNS.COLID = SYSINDEXKEYS.COLID; /*注意:這是在4張系統表中尋找的,關系比較復雜,大致可以表示為: SYSCOLUMNS中存有表中的列信息和表ID, SYSOBJECTS表中存有主鍵名字(即PK_TABLE類似)和表ID, SYSINDEXES中存有主鍵名字和表ID和INDEX編號, SYSINDEXKEYS中存有表ID和INDEX編號和列編號, 一項一項對應起來后就能找到列名了,呼~*/ ----5、得到表中列的描述內容----- '表示沒有找到' SELECT A.NAME,G.VALUE FROM SYSCOLUMNS AS A LEFT JOIN SYSPROPERTIES G ON A.ID=G.ID AND A.COLID = G.SMALLID WHERE A.ID='BCUSTOMER'
SELECT ROW_NUMBER() OVER (ORDER BY a.name) AS No,
a.name AS 表名,
CONVERT(NVARCHAR(100), ISNULL(g.[value], '-')) AS 說明,
c.name,
g2.value
FROM sys.tables a
LEFT JOIN sys.extended_properties g
ON (
a.object_id = g.major_id
AND g.minor_id = 0
)
LEFT JOIN sys.columns c
ON a.object_id = c.object_id
LEFT JOIN sys.extended_properties g2
ON (
a.object_id = g2.major_id
AND g2.minor_id = c.column_id
)
;