Добавь в скрипт комментарии строк кода на русском языке   /* Данный скрипт выполняет запрос к базе данных для получения данных, 
которые не присутствуют в результатах пересечения шести таблиц. 
Он объявляет переменные для имен таблиц и использует их в запросах SELECT и EXCEPT. 
Затем он объединяет результаты с выборкой всех строк из каждой таблицы, 
которые не присутствуют в результатах пересечения остальных пяти таблиц. */

--================================================================================================

DECLARE @Comanda_For_Del_TempTable varchar(2500) -- Переменная, которая будет содержать команду для 
												-- проверки существования и удаления временных таблиц
DECLARE @Chislo_TempTable int = 200 -- Количество вспомогательных временных таблиц используемых в запросе'												  
DECLARE @Schetchik int = 1	     -- Счетчик цикла для 		

-- Задаем имя для таблиц, которые будем сравнивать
DECLARE @kratk_name_table NVARCHAR(50) = 'S21'

--================================================================================================

-- Записываем  цикл и текст команды
-- для проверки существования и удаления вспомогательных временных таблиц

SET @Schetchik = 1
WHILE @Schetchik <= @Chislo_TempTable
BEGIN
  SET @Comanda_For_Del_TempTable =
  '	IF Object_Id(' + '''' + 'TempDB..##Global_temp' + LTRIM(RTRIM(CAST(@Schetchik AS varchar(3)))) + ''''
  + ') IS NOT NULL' + CHAR(10) + CHAR(13)
  + '		BEGIN' + CHAR(10) + CHAR(13)
  + '			DROP TABLE ##Global_temp' + LTRIM(RTRIM(CAST(@Schetchik AS varchar(3)))) + CHAR(10) + CHAR(13)
  + '		END' + CHAR(10) + CHAR(13)
  EXEC (@Comanda_For_Del_TempTable)

  --Print @Comanda_For_Del_TempTable
  SET @Schetchik = @Schetchik + 1
END

--================================================================================================





-- Объявление переменных с именами таблиц
DECLARE @table1_name NVARCHAR(50) = 'ASPKemZavod.dbo.' + @kratk_name_table
DECLARE @table2_name NVARCHAR(50) = 'ASPKemCent.dbo.' + @kratk_name_table
DECLARE @table3_name NVARCHAR(50) = 'ASPKemlen.dbo.' + @kratk_name_table
DECLARE @table4_name NVARCHAR(50) = 'ASPKemkir.dbo.' + @kratk_name_table
DECLARE @table5_name NVARCHAR(50) = 'ASPKemrud.dbo.' + @kratk_name_table
DECLARE @table6_name NVARCHAR(50) = 'ASPKemkedr.dbo.' + @kratk_name_table


-- Формирование динамического SQL-запроса
/*
Временная таблица создается внутри динамического SQL запроса, который выполняется в отдельной сессии 
со своим контекстом выполнения. Поэтому после выполнения запроса временная таблица может быть 
недоступна в текущей сессии.
Чтобы решить эту проблему, можно использовать глобальную временную таблицу, 
которая будет доступна из любой сессии. 
Для создания глобальной временной таблицы нужно использовать префикс ## перед именем таблицы:
*/

-- Объявление переменной для хранения динамического SQL-запроса
DECLARE @sql NVARCHAR(MAX)

SET @sql = '
SELECT * INTO ##Global_temp1  FROM ' + @table1_name + '
EXCEPT (
SELECT * FROM ' + @table2_name + '
INTERSECT SELECT * FROM ' + @table3_name + '
INTERSECT SELECT * FROM ' + @table4_name + '
INTERSECT SELECT * FROM ' + @table5_name + '
INTERSECT SELECT * FROM ' + @table6_name + '
)
UNION
SELECT * FROM ' + @table2_name + '
EXCEPT (
SELECT * FROM ' + @table1_name + '
INTERSECT SELECT * FROM ' + @table3_name + '
INTERSECT SELECT * FROM ' + @table4_name + '
INTERSECT SELECT * FROM ' + @table5_name + '
INTERSECT SELECT * FROM ' + @table6_name + '
)
UNION
SELECT * FROM ' + @table3_name + '
EXCEPT (
SELECT * FROM ' + @table1_name + '
INTERSECT SELECT * FROM ' + @table2_name + '
INTERSECT SELECT * FROM ' + @table4_name + '
INTERSECT SELECT * FROM ' + @table5_name + '
INTERSECT SELECT * FROM ' + @table6_name + '
)
UNION
SELECT * FROM ' + @table4_name + '
EXCEPT (
SELECT * FROM ' + @table1_name + '
INTERSECT SELECT * FROM ' + @table2_name + '
INTERSECT SELECT * FROM ' + @table3_name + '
INTERSECT SELECT * FROM ' + @table5_name + '
INTERSECT SELECT * FROM ' + @table6_name + '
)
UNION
SELECT * FROM ' + @table5_name + '
EXCEPT (
SELECT * FROM ' + @table1_name + '
INTERSECT SELECT * FROM ' + @table2_name + '
INTERSECT SELECT * FROM ' + @table3_name + '
INTERSECT SELECT * FROM ' + @table4_name + '
INTERSECT SELECT * FROM ' + @table6_name + '
)
UNION
SELECT * FROM ' + @table6_name + '
EXCEPT (
SELECT * FROM ' + @table1_name + '
INTERSECT SELECT * FROM ' + @table2_name + '
INTERSECT SELECT * FROM ' + @table3_name + '
INTERSECT SELECT * FROM ' + @table4_name + '
INTERSECT SELECT * FROM ' + @table5_name + '
)' 

-- print @sql

-- Выполнение динамического SQL-запроса
EXEC sp_executesql @sql

-- Select * from ##Global_temp1


-- Получаем список полей временной таблицы через запятую
-- Функция COALESCE(@cols + ' + ', '') в T-SQL объединяет значения столбцов в строку с разделителем ','
-- Если значения столбцов равны NULL, то возвращается пустая строка.
DECLARE @cols NVARCHAR(MAX)

SELECT @cols = COALESCE(@cols + ',', '') + name
FROM tempdb.sys.columns
WHERE object_id = OBJECT_ID('tempdb..##Global_temp1')

-- SELECT @cols as ListFields


-- Объявление переменной для хранения динамического SQL-запроса
DECLARE @sql2 NVARCHAR(MAX) = 'SELECT HASHBYTES(''SHA1'', CONCAT(' + @cols + ')) AS hash, * INTO ##Global_temp2 FROM ##Global_temp1'

-- Выполнение динамического SQL-запроса
EXEC sp_executesql @sql2

Select distinct * From ##Global_temp2 order by id, hash


-- Объявление переменной для хранения динамического SQL-запроса
-- Выбираем все записи во всех сравниваемых таблицах
DECLARE @sql3 NVARCHAR(MAX)

SET @sql3 = '
SELECT ''' + @table1_name + ''' as table_name, * INTO ##Global_temp3  FROM ' + @table1_name + '
Union ' + '
SELECT ''' + @table2_name + ''' as table_name, * FROM ' + @table2_name + '
Union ' + '
SELECT ''' + @table3_name + ''' as table_name, * FROM ' + @table3_name + '
Union ' + '
SELECT ''' + @table4_name + ''' as table_name, * FROM ' + @table4_name + '
Union ' + '
SELECT ''' + @table5_name + ''' as table_name, * FROM ' + @table5_name + '
Union ' + '
SELECT ''' + @table6_name + ''' as table_name, * FROM ' + @table6_name


-- print @sql3

-- Выполнение динамического SQL-запроса
EXEC sp_executesql @sql3

-- Select * From ##Global_temp3


-- Объявление переменной для хранения динамического SQL-запроса
DECLARE @sql4 NVARCHAR(MAX) = 'SELECT HASHBYTES(''SHA1'', CONCAT(' + @cols + ')) AS hash, * INTO ##Global_temp4 FROM ##Global_temp3'

-- Выполнение динамического SQL-запроса
EXEC sp_executesql @sql4

-- Select * From ##Global_temp4 order by id, hash, table_name


-- Получаем данные различающиеся в одних и тех же таблицах, в разных базах данных

Select distinct gltbl4.table_name, gltbl2.* From ##Global_temp2 as gltbl2, ##Global_temp4 as gltbl4
	Where gltbl2.hash=gltbl4.hash
	order by gltbl2.id, gltbl2.hash, gltbl4.table_name



--================================================================================================

-- Записываем  цикл и текст команды
-- для проверки существования и удаления вспомогательных временных таблиц

SET @Schetchik = 1
WHILE @Schetchik <= @Chislo_TempTable
BEGIN
  SET @Comanda_For_Del_TempTable =
  '	IF Object_Id(' + '''' + 'TempDB..##Global_temp' + LTRIM(RTRIM(CAST(@Schetchik AS varchar(3)))) + ''''
  + ') IS NOT NULL' + CHAR(10) + CHAR(13)
  + '		BEGIN' + CHAR(10) + CHAR(13)
  + '			DROP TABLE ##Global_temp' + LTRIM(RTRIM(CAST(@Schetchik AS varchar(3)))) + CHAR(10) + CHAR(13)
  + '		END' + CHAR(10) + CHAR(13)
  EXEC (@Comanda_For_Del_TempTable)

  --Print @Comanda_For_Del_TempTable
  SET @Schetchik = @Schetchik + 1
END