当前位置:Gxlcms >
数据库问题 >
SQLServer中获取所有数据库名、所有表名 描述、所有字段名的SQL语句
SQLServer中获取所有数据库名、所有表名 描述、所有字段名的SQL语句
时间:2021-07-01 10:21:17
帮助过:18人阅读
--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 top 1000
ROW_NUMBER() OVER (ORDER BY a.name) AS No,
a.name AS 表名,
CONVERT(NVARCHAR(100),isnull(g.[value],‘-‘)) AS 说明
from
sys.tables a left join sys.extended_properties g
on (a.object_id = g.major_id AND g.minor_id = 0)
SQLServer中获取所有数据库名、所有表名 描述、所有字段名的SQL语句
标签:top obj 删除 表名 https sql 系统 font 物理内存