您的当前位置:首页正文

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

2021-02-12 来源:易榕旅网
SQLServer中获取所有数据库名、所有表名、所有字段名的SQL语句

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

因篇幅问题不能全部显示,请点此查看更多更全内容