查询以获取SQL Server 2008数据库中所有表的名称

时间:2010-05-21 13:25:49

标签: sql-server-2008

是否可以编写一个查询,它将为我提供SQL Server数据库中所有表的名称?我正在研究一个我没有创建的系统上的'事后'文档,并且正在寻找一个快捷方式来获取数据库中表的列表。

6 个答案:

答案 0 :(得分:48)

在单个数据库中 - 是:

USE your_database
SELECT name FROM sys.tables

获取所有数据库中的所有表 - 仅限于黑客....请参阅此问题以了解如何执行此操作的几种方法:How do I list all tables in all databases in SQL Server in a single result set?

答案 1 :(得分:8)

另一种方式,也适用于MySQL和PostgreSQL

select TABLE_NAME from INFORMATION_SCHEMA.TABLES
where TABLE_TYPE = 'BASE TABLE'

答案 2 :(得分:4)

试试这个:

SELECT s.NAME + '.' + t.NAME AS TableName
FROM sys.tables t
INNER JOIN sys.schemas s
    ON t.schema_id = s.schema_id

它将显示当前数据库中所有表的模式+表名。

这是一个版本,它将列出当前服务器上每个数据库中的每个表。它允许搜索参数用于服务器的任何部分或部分+数据库+模式+表名:

SET NOCOUNT ON
DECLARE @AllTables table (CompleteTableName nvarchar(4000))
DECLARE @Search nvarchar(4000)
       ,@SQL   nvarchar(4000)
SET @Search=null --all rows
SET @SQL='select @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id WHERE @@SERVERNAME+''.''+''?''+''.''+s.name+''.''+t.name LIKE ''%'+ISNULL(@SEARCH,'')+'%'''

INSERT INTO @AllTables (CompleteTableName)
    EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY 1

将所有表的@Search设置为NULL,将其设置为'dbo.users'或'users'或'.master.dbo'之类的内容,或甚至包含'.master。%。u'等通配符。< / p>

答案 3 :(得分:1)

要获取字段信息,您可以使用以下内容:

SELECT TABLE_SCHEMA, TABLE_NAME, 
       COLUMN_NAME, substring(DATA_TYPE, 1,1) AS DATA_TYPE
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA NOT IN("information_schema", "mysql", "performance_schema") 
ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION

答案 4 :(得分:0)

sys.tables

包含所有表格。 所以执行此查询以获取包含详细信息的所有表。

SELECT * FROM sys.tables

enter image description here

或只需从sys.tables中选择Name即可获取所有表的名称。

SELECT Name From sys.tables

答案 5 :(得分:0)

请使用以下查询列出数据库中的表格。

select name from sys.Tables 

另外,您可以添加where条件,以跳过系统生成的表,并通过添加type ='U'

仅列出用户创建的表

例如:select name from sys.Tables where type ='U'