如何对比不同数据库中两张表的列并找出仅在Table_1存在的列
问题原因
INFORMATION_SCHEMA.COLUMNS 表的查询默认仅匹配当前连接数据库下的表元数据,你之前的语句仅指定了表名筛选条件,没有指定表所属的数据库,跨库查询时自然无法匹配到另一库的表信息。
解决方案
在查询条件中增加TABLE_SCHEMA字段筛选,明确指定表所属的数据库,即可在任意数据库环境下执行查询:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'Database_1' AND TABLE_NAME = 'Table_1' EXCEPT SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'Database_2' AND TABLE_NAME = 'Table_2'
补充说明
- 如果你使用的是SQL Server,且表属于非默认schema,可以额外增加对应schema的筛选条件,示例:
WHERE TABLE_CATALOG = 'Database_1' AND TABLE_SCHEMA = '自定义schema名' AND TABLE_NAME = 'Table_1' - 执行语句的账号需要拥有两个数据库的元数据读取权限,否则仍会返回空结果。
内容的提问来源于stack exchange,提问作者Mikko
相关产品推荐
相关产品推荐

