列出服务器上所有具有模式的表是没有问题的
SELECT SCHEMA_NAME(schema_id), name FROM sys.tables
如何确定表驻留在哪个数据库中?
sys.tables 存在于所有数据库中,因此我不遵循您不知道所在数据库的事实。您可以运行 DB_NAME(DB_ID()) 来获取数据库名称
SELECT DB_NAME(DB_ID()),SCHEMA_NAME(schema_id), name FROM sys.tables
但在这种情况下 DB_NAME(DB_ID()) 将为每一行返回相同的值
要对所有数据库执行此操作,您可以这样做
EXEC sp_msforeachdb 'use [?] SELECT ''?'',SCHEMA_NAME(schema_id), name
FROM sys.tables'
您当然也可以将其转储到表中
CREATE TABLE #output (DatabaseName VARCHAR(1000),
SchemaName VARCHAR(1000),
TableName VARCHAR(1000))
INSERT #output
EXEC sp_msforeachdb 'use [?] SELECT ''?'',SCHEMA_NAME(schema_id), name
FROM sys.tables'
SELECT * FROM #output
仅供参考, sp_msforeachdb 过程没有记录,您不应该将其用于生产代码,快速找到一些东西就可以了,对于生产代码,请滚动您自己的该过程版本
另请参阅 Aaron Bertrand 的帖子:
- 制作更可靠、更灵活的 sp_MSforeachdb https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/
- 在 SQL Server 中每个数据库的上下文中执行命令 https://www.mssqltips.com/sqlservertip/5694/execute-a-command-in-the-context-of-each-database-in-sql-server--part-2/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)