我需要将A列与B列进行比较,依此类推......并标出差异 例如。
SELECT OL.ID
,OFT.ID
,CASE WHEN OL.ID <> OFT.ID THEN 'FALSE'
ELSE 'TRUE'
END AS DIFF_Flag
,OL.Fname
,OFT.Fname
,CASE WHEN OL.Fname <> OFT.Fname THEN 'FALSE'
ELSE 'TRUE'
END AS DIFF_Flag
FROM TABLE1 OL
INNER JOIN TABLE2 OFT ON OL.ID= OFT.ID
有太多的列要做到这一点......
我的动态SQL查询 - &gt;
declare @Table1ColumnList varchar(1000)='a.ID, a.Fname'
declare @Table2ColumnList varchar(1000)='b.ID, a.Fname'
declare @sql nvarchar(2000)
set @sql= 'SELECT '+ @Table1ColumnList +' ,'+ @Table2ColumnList
+', CASE WHEN ' + @Table1ColumnList + '<> '+@Table2ColumnList +' THEN '+'''FALSE'''
+' ELSE '+'''TRUE'''
+' END AS DIFF_flag'
+ ' FROM TABLE a
INNER JOIN TABLE b ON a.ID=b.ID'
如何递归循环遍历所有列..
样本O / P
我的问题类似于ref
我正在使用SQL Server 2008
答案 0 :(得分:2)
select 'SELECT '''' as dummy, ';
select replace(
', case when coalesce(t1.%c, ''!@#'') <> coalesce(t2.%c, ''!@#'') then ''ROW '' + t1.ID + '': Mismatch in %c ('' + coalesce(t1.%c, ''NULL'') + '', '' + coalesce(t2.%c, ''NULL'') + '')'' else null end as Compare%c',
'%c',
COLUMN_NAME
)
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'TABLE1' AND COLUMN_NAME <> 'ID'
order by ORDINAL_POSITION;
select 'FROM Table1 as t1 INNER JOIN Table2 as t2 on t2.ID = t1.ID WHERE 0 = 1';
select replace(
' OR coalesce(t1.%c, ''!@#'') <> coalesce(t2.%c, ''!@#'')',
'%c',
COLUMN_NAME
)
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'TABLE1' AND COLUMN_NAME <> 'ID'
order by ORDINAL_POSITION;
您可以动态创建查询。这样的东西将为您提供过滤或生成输出的表达式列表。
如果你需要在代码中动态地执行此操作,则必须使用其中一个字符串连接技巧或使用游标。
对于一次性的事情并保存一些打字,您只需抓住结果并从中构建另一个查询。