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

Joh*_* H. 30 sql-server-2008

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

mar*_*c_s 49

在单个数据库中 - 是:

USE your_database
SELECT name FROM sys.tables
Run Code Online (Sandbox Code Playgroud)

获取所有数据库中的所有表 - 只有一个hack ....请参阅以下几个方法的SO问题如何执行此操作:如何在单个结果集中列出SQL Server中所有数据库中的所有表?


SQL*_*ace 8

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

select TABLE_NAME from INFORMATION_SCHEMA.TABLES
where TABLE_TYPE = 'BASE TABLE'
Run Code Online (Sandbox Code Playgroud)


KM.*_*KM. 5

尝试这个:

SELECT s.NAME + '.' + t.NAME AS TableName
FROM sys.tables t
INNER JOIN sys.schemas s
    ON t.schema_id = s.schema_id
Run Code Online (Sandbox Code Playgroud)

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

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

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
Run Code Online (Sandbox Code Playgroud)

将所有表的@Search设置为NULL,将其设置为'dbo.users'或'users'或'.master.dbo'之类,甚至包括通配符,例如'.master。%。u'等。