Я обычно выкидываю рекурсивный список каталогов с датами и размерами файлов во временную таблицу. Затем я удаляю предметы, не найденные:
delete
from A
where not exists (
select null as nothing
from temp b
where a.key = b.key )
Затем я обновляю уже имеющиеся элементы (для размеров файлов, CRC):
update a set nonkeyfield1 = b.nonkeyfield1, nonkeyfield2 = b.nonkeyfield2
from a join temp b on a.key = b.key
Затем я добавляю найденные предметы:
insert into A ( field, list)
select field, list
from temp b
where not exists (
select null as nothing
from A
where b.key = a.key )
Это из памяти, поэтому сначала проверьте его, прежде чем летать. Выбранное значение null, поскольку ничто не мешает вам тратить ОЗУ, пока вы что-то проверяете.