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

获取表列表但不包括系统表(SQL Server 2K)?,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,我知道我可以通过以下查询从给定数据库获取表列表: select * from information_schema.tables 但是,我如何排除系统表呢?我知道这是一个很老的问题,但有人刚刚编辑了它来恢复它,从我的角度来看,“正确”的答案并不是这两个问题中的任何一个。包括一些“系统”表(dtproperties在注释中提到。如果用户有任何正在进行的复制,他们会发现更多) select name from sysobjects where type='U' 使用2005年的表,但几乎是正确的

我知道我可以通过以下查询从给定数据库获取表列表:

select *
from information_schema.tables

但是,我如何排除系统表呢?

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

select name from sysobjects where type='U'
使用2005年的表,但几乎是正确的。对于2000,您希望改为使用:


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

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

并检索您的表列表。但SQL 2K不支持此功能。自2005服务器以来已存在

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

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

似乎没有像我期望的那样工作。在ManagementStudio的System tables文件夹下显示的其中一个表“dtproperties”也显示在此查询和我的原始文档中。ManagementStudio如何/为什么将其标识为系统表?dtproperties存储了我相信的数据图信息,我猜它在技术上被归类为用户表。谢谢。所以我想我写查询只是为了明确地忽略这个表,或者有一种“更干净”的方式围绕着它?如果这是唯一一个给你带来问题的表,那么我认为仅仅写查询来明确地忽略它不会太可怕。它是目前唯一的一个,我只是想确保将来没有任何其他潜在问题。对不起,SQL Server 2000不支持sys.tables。
select name from sysobjects where
    OBJECTPROPERTY(id,N'IsTable')=1 and
    OBJECTPROPERTY(id,N'IsMSShipped')=0
    SELECT *
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME NOT LIKE 'sys%'