我知道我可以使用以下查询从给定数据库中获取表列表:
select *
from information_schema.tables
我该如何排除系统表?
我知道这是一个相当老的问题,但有人刚刚对其进行了编辑以使其复活,并且从我的角度来看,“正确”的答案不是列出的两个答案中的任何一个。 接受的答案包括一些“系统”表(评论中提到了
dtproperties
。如果用户正在进行任何复制,他们会发现更多)。
其他答案使用 2005 年的表格,但几乎是正确的。对于 2000,您想使用
OBJECTPROPERTY
代替:
select name from sysobjects where
OBJECTPROPERTY(id,N'IsTable')=1 and
OBJECTPROPERTY(id,N'IsMSShipped')=0
select name from sysobjects where type='U'
SELECT name FROM [database].sys.tables where is_ms_shipped=0
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME NOT LIKE 'sys%'
这不是一个优雅的解决方案,但这是我排除 dbo.sysdiagrams 的快速方法,它是我列表中唯一的系统表。
我知道这也是一个很老的问题,但是你可以执行 sql server 存储过程:
执行 sp_tables @table_name="%", @table_owner="%",@table_type="'TABLE'"
并检索您的餐桌列表。但 SQL 2K 不支持。自 2005 年服务器以来就存在...
我从 SQL Server Express 2022 开始就使用它:
SELECT name FROM sys.tables
WHERE is_ms_shipped = 0 AND name <> 'sysdiagrams'