博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLServer中获取所有数据库名、所有表名、所有字段名的SQL语句
阅读量:7072 次
发布时间:2019-06-28

本文共 3175 字,大约阅读时间需要 10 分钟。

----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.XTYPEFROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEXKEYSWHERE 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'

  

----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'

转载于:https://www.cnblogs.com/qianjinyan/p/9636535.html

你可能感兴趣的文章
MYSQL语句
查看>>
Android WebView 详解(持续更新)
查看>>
ElasticSearch动态添加节点及相关配置项
查看>>
Android studio 使用心得(十)---android studio 多渠道打包(三)
查看>>
数据库选型的一些看法
查看>>
PHP接口&抽象类验证笔记
查看>>
Spark Streaming源码解读之No Receivers
查看>>
使用背景图的div宽高自适应
查看>>
sql注入工具
查看>>
MongoDB 开启用户认证登录
查看>>
ADO.NET操作数据库(一)
查看>>
指针与引用的本质区别
查看>>
Auto Layout 使用心得(五)—— 根据文字、图片自动计算 UITableViewCell
查看>>
M3U8在线视频文件下载合成MP4视频(自己想看电影)
查看>>
HTML5的布局的使用
查看>>
hdu 1068 二分图的最大匹配匈牙利算法
查看>>
一个IT人的非典型职场十年 (4)
查看>>
Netty之Recycler实现对象池
查看>>
Netty5入门学习笔记004-使用Netty传输POJO对象(上)
查看>>
Eclipse的快捷键总结
查看>>