Вы можете использовать приведенный ниже запрос перед выполнением, вы должны использовать replace [SourceDB] для вашей исходной базы данных и [TargertDB] для вашей целевой базы данных.Вставьте имя таблицы в #mdtables для включения в сравнение.
USE [SourceDB]
IF Object_id('tempdb..#mdTables') IS NOT NULL
DROP TABLE #mdtables;
CREATE TABLE #mdtables
(
id INT IDENTITY(1, 1) NOT NULL,
schemaname NVARCHAR(128),
tablename NVARCHAR(128)
);
INSERT INTO #mdtables
(schemaname,
tablename)
VALUES ('dbo',
'user');
DECLARE @mdTableLim INT =0,
@mdTableRowId INT =0
SELECT @mdTableLim = Count(*)
FROM #mdtables;
SET @mdTableRowId = 1;
WHILE @mdTableRowId <= @mdTableLim
BEGIN
DECLARE @SDBName VARCHAR(50) = '[SourceDB]',
@TDBName VARCHAR(50) = '[TargertDB]',
@tableName VARCHAR(100) = ''
DECLARE @WhereF VARCHAR(max) ='',
@joincondition VARCHAR(max) ='',
@or VARCHAR(10) ='',
@select VARCHAR(max) = '',
@comma VARCHAR(1)='',
@query VARCHAR(max) ='',
@and VARCHAR(5)='',
@where1 VARCHAR(1000) ='',
@wOR VARCHAR(5)=''
SELECT @tableName = tablename
FROM #mdtables
WHERE id = @mdTableRowId;
SELECT @joincondition += Isnull(@and + ( CASE
WHEN cu.column_name IS NULL
THEN
NULL
ELSE ' src.[' + cu.column_name
+
'] = ' +
'trgt.['
+ c.column_name + ']'
END ), ''),
@WhereF += Isnull (@or + ( CASE
WHEN cu.column_name IS NOT NULL THEN
NULL
ELSE Isnull ( ' src.[' +
TC.column_name
+
'] ',
' isnull( src.[' +
C.column_name +
'],1) ' )
+ Isnull( '<> trgt.[' +
TC.column_name
+ ']',
' = isnull (src.['
+
C.column_name + '],1) ')
END ), ''),
@or = ( CASE
WHEN cu.column_name IS NOT NULL THEN ''
ELSE ' OR '
END ),
@and = ( CASE
WHEN cu.column_name IS NULL THEN ''
ELSE ' AND '
END ),
@select += @comma + ' src.[' + c.column_name + '] '
+ Isnull (' , trgt.[' + TC.column_name + ']', ''),
@comma = ',',
@where1 += Isnull(( @wOR + ( CASE
WHEN cu.column_name IS NULL THEN
NULL
ELSE ' trgt.[' + cu.column_name +
'] is null '
END ) ), ''),
@wOR = ( CASE
WHEN cu.column_name IS NULL THEN ''
ELSE ' OR '
END )
FROM information_schema.columns C
LEFT JOIN information_schema.key_column_usage CU
ON C.column_name = cu.column_name
AND constraint_name LIKE 'PK_%'
AND c.table_name = cu.table_name
LEFT JOIN [TargertDB].information_schema.columns TC
ON C.column_name = TC.column_name
AND c.table_name = TC.table_name
WHERE c.table_name = @tableName
--AND columnproperty(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 0
AND c.column_name NOT IN ( 'LST_CHG_TMS', 'LST_CHG_TMS',
'LST_CHG_USR_ID'
,
'LST_CHG_USR_ID' )
AND c.data_type NOT IN ( 'image' )
ORDER BY cu.column_name
SET @query = 'select ' + @select + ' from ' + @SDBName + '.dbo.'
+ @tableName + ' as src left join ' + @TDBName
+ '.dbo.' + @tableName + ' as trgt on '
+ @joincondition + ' where (' + @where1 + ')'
+ Isnull ('and '+ NULLIF (@WhereF, ''), '')
DECLARE @qu1 VARCHAR(max) =
' declare @cnt int =0 select @cnt =count (1) from '
+ @SDBName + '.dbo.' + @tableName
+ ' as src left join ' + @TDBName + '.dbo.'
+ @tableName + ' as trgt on ' + @joincondition
+ ' where (' + @where1 + ')'
+ Isnull (' OR '+ NULLIF (@WhereF, ''), '')
+ ' if (@cnt>0) begin select '''
+ @tableName + ''' as [ ],@cnt ' +-- @query + ' end '
BEGIN try
EXECUTE ( @qu1)
END try
BEGIN catch
PRINT @qu1;
END catch
SET @mdTableRowId = @mdTableRowId + 1
END