获取表列表但不包括系统表(SQL Server 2K)?

时间:2010-07-09 20:14:15

标签: sql sql-server sql-server-2000

我知道我可以使用以下查询从给定数据库中获取表的列表:

select *
from information_schema.tables

我如何排除系统表呢?

5 个答案:

答案 0 :(得分:6)

select name from sysobjects where type='U'

答案 1 :(得分:6)

我知道这是一个相当古老的问题,但有人只是编辑它来复活它,从我的角度来看,“正确”的回答并不是列出的两个问题。 accepted answer包含一些“系统”表(注释中提到了dtproperties。如果用户正在进行任何复制,他们会发现更多)。

other answer使用2005表,但几乎是正确的。对于2000年,您希望改为使用OBJECTPROPERTY

select name from sysobjects where
    OBJECTPROPERTY(id,N'IsTable')=1 and
    OBJECTPROPERTY(id,N'IsMSShipped')=0

答案 2 :(得分:3)

SELECT name FROM [database].sys.tables where is_ms_shipped=0

答案 3 :(得分:1)

    SELECT *
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME NOT LIKE 'sys%'

这不是一个很好的解决方案,但这是我排除dbo.sysdiagrams(这是我列表中唯一的系统表)的快速方法。

答案 4 :(得分:0)

我知道这也是一个很老的问题,但你可以执行sql server存储过程:

  

EXEC sp_tables @table_name =“%”,@ table_owner =“%”,@ table_type =“'TABLE'”

并检索您的表格列表。但是SQL 2K不支持。自2005年服务器以来就存在......