Шаблон для простой блокировки таблицы в SQL Server
Я читал MSDN об уровнях изоляции транзакций и подсказках таблиц, чтобы выяснить, что мне нужно сделать, чтобы блокировать таблицу исключительно во время двухэтапной вставки в SQL Server. Я придумал 2 способа сделать это и хотел бы знать, в чем разница между подходами.
Этот ответ показывает, как это сделать с помощью подсказок ( /questions/27679210/sql-server-kak-zablokirovat-tablitsu-do-zaversheniya-hranimoj-protseduryi/27679215#27679215):
--Enclose steps in transaction to define an atomic operation
BEGIN TRAN
-- Perform an insert that locks tblMoo
INSERT INTO tblMoo SET fldCow='valPie' WITH (TABLOCKX, SERIALIZABLE)
UPDATE tblMoo SET fldCowIndex=(SELECT MAX(fldCowIndex) + 1)
COMMIT TRAN
Я думаю, что я также мог бы достичь своей цели, установив уровень изоляции:
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
INSERT blah blah blah
UPDATE hoo dee dah
COMMIT TRAN
Важно, чтобы я блокировал всю таблицу от любых обновлений, пока моя транзакция вставляет эту новую строку. Приведут ли оба подхода к одному и тому же результату: таблица заблокирована для команд INSERT и UPDATE?