在SQL Server上获得特定数据库中所有表的名称的最佳方法是什么?


当前回答

INFORMATION_SCHEMA的缺点。它还包括系统表,如dtproperties和MSpeer_…表,没有办法把它们和你自己的表区分开来。

我建议使用sys。对象(已弃用的sysobjects视图的新版本),它支持排除系统表:

select *
from sys.objects
where type = 'U'      -- User tables
and is_ms_shipped = 0 -- Exclude system tables

其他回答

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME
--for oracle
select tablespace_name, table_name from all_tables;

这个链接可以提供更多的信息 主题

SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

下面是你可以搜索的其他对象类型的列表:

AF: Aggregate function (CLR) C: CHECK constraint D: Default or DEFAULT constraint F: FOREIGN KEY constraint L: Log FN: Scalar function FS: Assembly (CLR) scalar-function FT: Assembly (CLR) table-valued function IF: In-lined table-function IT: Internal table P: Stored procedure PC: Assembly (CLR) stored-procedure PK: PRIMARY KEY constraint (type is K) RF: Replication filter stored procedure S: System table SN: Synonym SQ: Service queue TA: Assembly (CLR) DML trigger TF: Table function TR: SQL DML Trigger TT: Table type U: User table UQ: UNIQUE constraint (type is K) V: View X: Extended stored procedure

SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(SQL Server 2000标准;SQL Server 2005仍然支持。)