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