Моя немедленная мысль - назначить каждому результату в вашем запросе номер строки и поместить результаты в временную таблицу. Используйте цикл while, начинающийся с 1, и просматривайте максимальное число, которое у вас есть в этой временной таблице, получая имя таблицы, которой номер строки назначен для каждого цикла. Используйте это имя для удаления из базы данных.
select 'TARGET' as dbname, t1.table_name
, ROW_NUMBER() OVER (Partition By t1.table_name) AS RowNumber
INTO #temp
from TARGET.[INFORMATION_SCHEMA].[tables] as t1
where table_name not in (select t2.table_name
from MODEL.[INFORMATION_SCHEMA].[tables] as t2)
DECLARE @counter INT = 1
DECLARE @maxNum INT
SELECT @maxNum = MAX(RowNumber) FROM #temp
While @counter <= @maxNum
BEGIN
DECLARE @tableName AS VARCHAR(MAX)
SELECT @tableName = table_name FROM #temp WHERE RowNumber = @counter
DELETE TABLE @tableName ' This may not be possible, but follow my lead
@counter += 1
END
DROP TABLE #temp
Я не уверен, является ли "DELETE TABLE @tableName" правильной командой, но, вероятно, существует очень похожее решение, использующее то, что я вам дал. Я предполагаю, что это T-SQL ..