Сблъсках се с проблем с безизходица synchronizing
таблица няколко пъти за кратък период от време. Под синхронизиране имам предвид извършване на следното:
- Вмъкнете данни за синхронизиране във временна таблица
- Актуализирайте съществуващите записи в целевата таблица
- Вмъкнете нови записи в целевата таблица
- Изтриване на записи, които не са в таблицата за синхронизиране при определени обстоятелства
- Таблица за спад на температурата
За операторите INSERT
и DELETE
използвам LEFT JOIN, подобно на:
INSERT INTO destination_table (fk1, fk2, val1)
FROM #tmp
LEFT JOIN destination_table dt ON dt.fk1 = #tmp.fk1
AND dt.fk2 = #temp.fk2
WHERE dt.pk IS NULL;
Графиката на блокиране отчита, че първичният ключ на table_table е под изключително заключване. Предполагам, че горната заявка причинява заключване на таблица или страница вместо заключване на ред. Как да потвърдя това?
Бих могъл да пренапиша горната заявка с команда IN
, EXIST
или EXCEPT
. Има ли допълнителни начини за преработване на кода? Рефакторингът с помощта на някоя от тези команди ще избегне ли проблема с блокиране? Кое би било най-доброто? Предполагам EXCEPT
.