INFORMATION_SCHEMA.TABLES
或INFORMATION_SCHEMA.COLUMNS
仅适用于指定的数据库。
是否可以通过使用INFORMATION_SCHEMA
查询服务器上所有数据库的表元数据?
INFORMATION_SCHEMA.TABLES
或INFORMATION_SCHEMA.COLUMNS
仅适用于指定的数据库。
是否可以通过使用INFORMATION_SCHEMA
查询服务器上所有数据库的表元数据?
你只能通过使用动态查询来进行数据库迭代。一种方法是使用ms_ForEachDB存储过程,第二种方法是查询sys.databases动态视图。
将Dalex的答案转化为代码。
--Make sure you have a global temporary table to use. Double dots are shorthand for .dbo.
IF OBJECT_ID('tempdb..##test') IS NOT NULL DROP TABLE ##test
--Create the table definition the easy way.
SELECT * INTO ##test
FROM ???.INFORMATION_SCHEMA.TABLES --The ??? will be whatever the name of your first database is.
DELETE FROM ##test
--Add all the data.
EXEC sp_MSforeachdb 'USE ? INSERT INTO ##test SELECT * FROM INFORMATION_SCHEMA.TABLES'
--View all the data.
SELECT * FROM ##test
--Clean up.
DROP TABLE ##test
修改了Dustin的代码(来自Dalex的建议),以适应具有空格的数据库名称并从结果中删除常见的系统表。
--Make sure you have a global temporary table to use. Double dots are shorthand for .dbo.
IF OBJECT_ID('tempdb..##test') IS NOT NULL DROP TABLE ##test
--Create the table definition the easy way.
SELECT top 1 * INTO ##test
FROM INFORMATION_SCHEMA.TABLES
DELETE FROM ##test
--Add all the data.
EXEC sp_MSforeachdb 'USE [?] INSERT INTO ##test SELECT * FROM INFORMATION_SCHEMA.TABLES'
--View all the data.
SELECT * FROM ##test
WHERE TABLE_CATALOG NOT IN ('master','tempdb', 'msdb')
ORDER BY TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME
--Clean up.
DROP TABLE ##test
SELECT TABLE_SCHEMA
FROM information_schema.tables
group by tables.TABLE_SCHEMA
SELECT DISTINCT TABLE_CATALOG FROM information_schema.tables
,您将只看到一个值。 - Davos这不是问题的答案,但这段文字增加了背景信息...对于某些人理解内容很有帮助。
在选择子句之前添加use语句来选择引用哪个数据库通常是可能的和必要的...
例如:
use CaseData
SELECT *
FROM information_schema.columns
--WHERE
--TABLE_CATALOG = 'CaseData'
--and TABLE_SCHEMA ='Clinical'
--and
--TABLE_NAME = 'SAASCaseData_NewFieldsOct2018'
SELECT DISTINCT `TABLE_SCHEMA` FROM `information_schema`.`TABLES`;