我知道我可以使用以下查询从给定数据库中获取表的列表:
select *
from information_schema.tables
我如何排除系统表呢?
答案 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年服务器以来就存在......