Шаблон для простой блокировки таблицы в 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?

0 ответов

Другие вопросы по тегам