SQL Server中如何找出两个表数据类型不匹配的列名
找出两个表中数据类型不匹配的列
嘿,这事儿好办!要找出table_a和table_b里数据类型不匹配的共同列,咱们可以用SQL直接对比它们的列结构。
方法一:基于给定静态表结构的验证查询
如果你只是想验证手头的表结构,咱们可以把两个表的列和类型用子查询模拟出来,再关联对比:
SELECT a.col_name, a.data_type AS table_a_data_type, b.data_type AS table_b_data_type FROM ( SELECT 'name' AS col_name, 'nvarchar' AS data_type UNION ALL SELECT 'age', 'nvarchar' UNION ALL SELECT 'city', 'nvarchar' UNION ALL SELECT 'dob', 'nvarchar' ) a INNER JOIN ( SELECT 'name' AS col_name, 'nvarchar' AS data_type UNION ALL SELECT 'age', 'int' UNION ALL SELECT 'city', 'nvarchar' UNION ALL SELECT 'dob', 'datetime' UNION ALL SELECT 'country', 'nvarchar' ) b ON a.col_name = b.col_name WHERE a.data_type <> b.data_type;
执行后会得到你想要的结果:
| col_name | table_a_data_type | table_b_data_type |
|---|---|---|
| age | nvarchar | int |
| dob | nvarchar | datetime |
方法二:真实数据库环境的通用查询
如果是在SQL Server这类数据库里,咱们可以直接查系统元数据视图,不用手动写表结构,更高效:
SELECT c1.COLUMN_NAME, c1.DATA_TYPE AS table_a_data_type, c2.DATA_TYPE AS table_b_data_type FROM INFORMATION_SCHEMA.COLUMNS c1 INNER JOIN INFORMATION_SCHEMA.COLUMNS c2 ON c1.COLUMN_NAME = c2.COLUMN_NAME WHERE c1.TABLE_NAME = 'table_a' AND c2.TABLE_NAME = 'table_b' AND c1.DATA_TYPE <> c2.DATA_TYPE;
这个查询会自动找出两个表中所有列名相同但数据类型不同的列,结果和上面完全一致。
内容的提问来源于stack exchange,提问作者tyson
相关产品推荐
相关产品推荐

