SQLServer中获取所有数据库名、所有表名 描述、所有字段名的SQL语句

原文: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
)
;

复制代码

 

posted @   Tozhang  阅读(1092)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示