У меня есть запрос на обновление SQL:
UPDATE table1
SET table1.field1 = 1
WHERE table1.id NOT IN (SELECT table2.table1id FROM table2);
Другие части приложения могут добавлять записи в table2, которые используют поле table1id для ссылки на table1.
Целью здесь является удаление записей из таблицы 1, на которые не ссылается таблица 2.
Обеспечивает ли SQL Server автоматическую блокировку таблицы 2 с помощью запроса такого типа, чтобы новая запись не могла быть добавлена в таблицу 2 при выполнении этого запроса?
Я тоже учел:
UPDATE table1
SET field1 = 1
WHERE 0 = (SELECT COUNT(*) FROM table2 WHERE table1.id = table2.table1id);
Что кажется, возможно, безопаснее, но гораздо медленнее (потому что SELECT будет вызываться в каждой строке таблицы 1 вместо одного выбора для NOT IN)