2011-04-26 38 views
4

INFORMATION_SCHEMA.TABLES或INFORMATION_SCHEMA.COLUMNS仅适用于指定的数据库。适用于服务器上所有数据库的SQL - INFORMATION_SCHEMA

是否有可能通过使用INFORMATION_SCHEMA查询服务器上所有数据库的表元数据?

+0

你有适当的访问与您的用户,这使得查询吗? – Adnan 2011-04-26 07:25:53

+0

假设我有,解决方案是什么? – 2011-04-26 07:26:58

回答

9

只有对数据库迭代使用动态查询,才能做到这一点。一种方法是使用ms_ForEachDB存储过程,其次是查询sys.databases动态视图。

1

您可以使用此:

SELECT TABLE_SCHEMA 
FROM information_schema.tables 
group by tables.TABLE_SCHEMA 
+0

虽然此代码可能会回答问题,但如果提供 关于_why_和/或_how_的其他上下文,则回答问题将显着提高其长期值 。请[编辑]你的答案,添加一些解释。 特别是,它是否一次抓取所有数据库的元数据? AIUI(基于MyQSL和PostgreSQL)将仅返回当前数据库的表元数据。 SQL Server在这方面有什么不同? – 2016-04-28 15:00:21

+0

这不回答这个问题。所提供的查询仅返回当前数据库上下文的数据。如果您的服务器上有多个数据库(TABLE_CATALOG),那么它不会显示所有这些数据库,这就是这个问题所要求的。试试这个'SELECT DISTINCT TABLE_CATALOG FROM information_schema.tables',你将只能看到一个值。 – Davos 2018-02-06 23:14:34

0
SELECT DISTINCT `TABLE_SCHEMA` FROM `information_schema`.`TABLES`; 
相关问题