我有以下比较 sql 代码。两个表都包含一个 IDCodeField 列。如何仅比较 IDCodeField,但如果匹配 IDCodeField,则返回所有字段?
目前我在下面使用,但是,它将比较所有字段而不是仅 IDCodeField。
ALTER PROCEDURE [dbo].[usp_comparetables](@table1 varchar(100),
@table2 Varchar(100), @columnlist Varchar(1000))
AS
DECLARE @sql VARCHAR(8000)
SET @sql =
'SELECT ''' + @table1 + ''' AS DataState, * FROM
(SELECT ' + @columnlist + ' FROM ' + @table1 + '
EXCEPT
SELECT ' + @columnlist + ' FROM ' + @table2 + ') x
UNION
SELECT ''' + @table2 + ''' AS DataState, * from
(SELECT ' + @columnlist + ' FROM ' + @table2 + '
INTERSECT
SELECT ' + @columnlist + ' FROM ' + @table1 +') x'
EXEC(@sql)
使用答案:
DECLARE @sql VARCHAR(8000)
SET @sql =
'SELECT ''' + @table1 + ''' AS DataState, '+@columnlist+' FROM ' + @table1 + ' where '+@compareparameter+' not in (select '+@compareparameter+' from '+@table2+')
UNION ALL
SELECT ''' + @table2 + ''' AS DataState, '+@columnlist+' FROM ' + @table2 + ' where '+@compareparameter+' not in (select '+@compareparameter+' from '+@table1+')'
EXEC(@sql)