Это может быть чрезмерно упрощено, но мы попытаемся использовать информационную схему:
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_CATALOG='DB NAME'
and TABLE_NAME='TABLE NAME'
Это даст всю информацию столбца и метаданные, относящиеся к рассматриваемой таблице.
Теперь попробуйте этодля обоих:
select
t1.COLUMN_NAME
,DataType_NoMatch = case when t1.DATA_TYPE <> t2.DATA_TYPE then 1 else 0 end
from
(
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_CATALOG='DB NAME'
and TABLE_SCHEMA = 'SCHEMA'
and TABLE_NAME='TABLE'
) t1
join
(
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_CATALOG='DBANME'
and TABLE_SCHEMA = 'SCHEMA'
and TABLE_NAME='TABLE2'
) t2 on t1.COLUMN_NAME=t2.COLUMN_NAME
и проработайте атрибуты, которые вы хотите сравнить.Я привел вам пример для типа данных.
Добавлено на основе комментариев Cross apply:
select
t1.COLUMN_NAME
,ca.*
from
(
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_CATALOG='DB NAME'
and TABLE_SCHEMA = 'dbo'
and TABLE_NAME='DimOrganization'
) t1
join
(
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_CATALOG='DB NAME'
and TABLE_SCHEMA = 'bak'
and TABLE_NAME='DimOrganization'
) t2 on t1.COLUMN_NAME=t2.COLUMN_NAME
cross apply
(select Metadata = 'DataType' ,TestPassFail = case when t1.DATA_TYPE <> t2.DATA_TYPE then 1 else 0 end
union all
select [Column] = 'CharMaxLen' ,TestPassFail = case when t1.CHARACTER_MAXIMUM_LENGTH <> t2.CHARACTER_MAXIMUM_LENGTH then 1 else 0 end
) ca
where ca.TestPassFail=1