在数据库日常使用中,获取所有表名和字段名是常见需求,不同数据库的查询语法各有不同,下面分别介绍三种数据库的实现方式。

Oracle数据库查询方法
查询所有表名
Oracle中表信息存储在数据字典表USER_TABLES中,当前用户有权限查看的表都可以通过该表查询。
-- 查询当前用户下所有表名 SELECT TABLE_NAME FROM USER_TABLES; -- 查询所有用户可访问的表名(需要对应权限) SELECT TABLE_NAME FROM ALL_TABLES; -- 查询数据库中所有表名(需要DBA权限) SELECT TABLE_NAME FROM DBA_TABLES;
查询指定表的字段名
字段信息存储在USER_TAB_COLUMNS数据字典中,可关联表名筛选对应字段。
-- 查询指定表的所有字段名,替换TABLE_NAME为实际表名 SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'TABLE_NAME';
SQL Server数据库查询方法
查询所有表名
SQL Server的系统视图sys.tables存储了所有用户表的元数据信息。
-- 查询当前数据库所有用户表名 SELECT name FROM sys.tables; -- 也可通过INFORMATION_SCHEMA视图查询 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';
查询指定表的字段名
字段信息可以通过sys.columns系统视图或者INFORMATION_SCHEMA.COLUMNS视图获取。
-- 方法1:使用sys.columns关联sys.tables,替换TableName为实际表名 SELECT c.name AS COLUMN_NAME FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE t.name = 'TableName'; -- 方法2:使用INFORMATION_SCHEMA视图,替换TableName为实际表名 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TableName';
Access数据库查询方法
查询所有表名
Access可以通过ADO的OpenSchema方法或者内置的MSysObjects系统表查询表名,注意MSysObjects默认可能隐藏。
-- 使用SQL查询MSysObjects获取所有用户表名,需在Access的查询窗口执行 SELECT Name FROM MSysObjects WHERE Type = 1 AND Flags = 0 AND Name NOT LIKE 'MSys*';
查询指定表的字段名
Access中可以通过ADOX组件或者DAO对象获取字段信息,以下是VBA示例代码。
Sub GetTableColumns()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
' 打开当前数据库,替换为实际数据库路径也可使用CurrentDb
Set db = CurrentDb
' 遍历所有表,替换TableName为实际表名
For Each tdf In db.TableDefs
If tdf.Name = "TableName" Then
For Each fld In tdf.Fields
Debug.Print fld.Name
Next fld
Exit For
End If
Next tdf
Set fld = Nothing
Set tdf = Nothing
Set db = Nothing
End Sub注意事项
- 查询时需要注意数据库用户权限,无对应权限可能无法查询到全部表或字段信息
- Oracle中表名默认是大写,查询时如果表名是小写需要加双引号或者转换为大写匹配
- Access的
MSysObjects表如果无法访问,需要在Access选项中开启显示系统对象的权限
OracleSQL_ServerAccess表名查询字段名查询修改时间:2026-05-30 21:54:06