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