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

问题描述 投票:0回答:6

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

select *
from information_schema.tables

我该如何排除系统表?

sql sql-server sql-server-2000
6个回答
9
投票

我知道这是一个相当老的问题,但有人刚刚对其进行了编辑以使其复活,并且从我的角度来看,“正确”的答案不是列出的两个答案中的任何一个。 接受的答案包括一些“系统”表(评论中提到了

dtproperties
。如果用户正在进行任何复制,他们会发现更多)。

其他答案使用 2005 年的表格,但几乎是正确的。对于 2000,您想使用

OBJECTPROPERTY
代替:

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

6
投票
select name from sysobjects where type='U'

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

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

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


0
投票

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

执行 sp_tables @table_name="%", @table_owner="%",@table_type="'TABLE'"

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


0
投票

我从 SQL Server Express 2022 开始就使用它:

SELECT name FROM sys.tables
WHERE is_ms_shipped = 0 AND name <> 'sysdiagrams'

© www.soinside.com 2019 - 2024. All rights reserved.