我正在尝试创建一个小的SQL脚本(在SQL Server Management Studio中)以获取两个不同数据库中所有表的列表。目标是找出两个数据库中存在哪些表以及哪些表只存在于其中一个表中。
我在SO上找到了各种脚本来列出一个数据库的所有表,但到目前为止我无法获得多个数据库的表列表。
那么:有没有办法在SQL Server中查询特定数据库中的所有表,例如: SELECT * FROM ... WHERE databaseName='first_db'
以便我可以将其与另一个数据库的结果联系起来吗?
答案 0 :(得分:20)
SELECT * FROM database1.INFORMATION_SCHEMA.TABLES
UNION ALL
SELECT * FROM database2.INFORMATION_SCHEMA.TABLES
<强>更新强>
为了比较这两个列表,您可以使用FULL OUTER JOIN
,它将显示两个数据库中存在的表以及仅存在于其中一个数据库中的表:
SELECT *
FROM database1.INFORMATION_SCHEMA.TABLES db1
FULL JOIN database2.INFORMATION_SCHEMA.TABLES db2
ON db1.TABLE_NAME = db2.TABLE_NAME
ORDER BY COALESCE(db1.TABLE_NAME, db2.TABLE_NAME)
您还可以添加WHERE db1.TABLE_NAME IS NULL OR db2.TABLE_NAME IS NULL
以仅查看数据库之间的差异。
答案 1 :(得分:2)
据我所知,您只能查询活动数据库的表。但是您可以将它们存储在临时表中,并加入结果:
use db1
insert #TableList select (...) from sys.tables
use db2
insert #TableList2 select (...) from sys.tables
select * from #TableList tl1 join Tablelist2 tl2 on ...
答案 2 :(得分:1)
为了完整起见,这是我最终使用的查询(基于Andriy M的回答):
SELECT * FROM DB1.INFORMATION_SCHEMA.Tables db1
LEFT OUTER JOIN DB2.INFORMATION_SCHEMA.Tables db2
ON db1.TABLE_NAME = db2.TABLE_NAME
ORDER BY db1.TABLE_NAME
要找出db2中存在但不存在于db1中的表,请将LEFT OUTER JOIN
替换为RIGHT OUTER JOIN
。