Sql server 如何获取两个不同数据库中所有表的列表

Sql server 如何获取两个不同数据库中所有表的列表,sql-server,database-schema,Sql Server,Database Schema,我正在尝试创建一个小SQL脚本(在SQLServerManagementStudio中),以获取两个不同数据库中所有表的列表。目标是找出哪些表存在于两个数据库中,哪些表只存在于其中一个数据库中 我在SO上找到了各种脚本来列出一个数据库的所有表,但到目前为止,我无法获得多个数据库的表的列表 那么:有没有一种方法可以查询SQL Server中特定数据库中的所有表,例如,SELECT*FROM。。。其中databaseName='first\u db',以便我可以将其与另一个数据库的结果结合起来?据我

我正在尝试创建一个小SQL脚本(在SQLServerManagementStudio中),以获取两个不同数据库中所有表的列表。目标是找出哪些表存在于两个数据库中,哪些表只存在于其中一个数据库中

我在SO上找到了各种脚本来列出一个数据库的所有表,但到目前为止,我无法获得多个数据库的表的列表


那么:有没有一种方法可以查询SQL Server中特定数据库中的所有表,例如,
SELECT*FROM。。。其中databaseName='first\u db'
,以便我可以将其与另一个数据库的结果结合起来?

据我所知,您只能查询活动数据库的表。但您可以将它们存储在临时表中,并加入结果:

use db1
insert #TableList select (...) from sys.tables
use db2
insert #TableList2 select (...) from sys.tables
select * from #TableList tl1 join Tablelist2 tl2 on ...

您还可以在db1.TABLE_NAME为NULL或db2.TABLE_NAME为NULL的位置添加
,以仅查看数据库之间的差异。

为了完整起见,这是我最后使用的查询(基于Andrey M的回答):


要找出哪些表存在于db2中,而不是db1中,请将
左外部联接
替换为
右外部联接

+1酷,我可以发誓这不起作用!甚至可以使用SQL Server特定的
db1.sys.tables
。是的,要找到这两个表,可以使用
FULL OUTER JOIN
SELECT * FROM database1.INFORMATION_SCHEMA.TABLES
UNION ALL
SELECT * FROM database2.INFORMATION_SCHEMA.TABLES
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)
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