0

I've been reading the MSDN about transaction isolation levels and table hints in an effort to find out what I need to do to exclusively lock a table while I perform a 2 step insert in SQL Server. I've come up with 2 ways to do it and would like to know what the difference is between the approaches.

This answer shows how to do it with hints (https://stackoverflow.com/a/23759307/545430):

--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

I think I could also achieve my objective by setting the isolation level:

BEGIN TRAN
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    INSERT blah blah blah
    UPDATE hoo dee dah
COMMIT TRAN

It is important that I lock the entire table from any updates while my transaction is inserting this new row. Would both approaches yield the same result: the table being locked for both the INSERT and UPDATE commands?

Community
  • 1
  • 1
Ian
  • 4,169
  • 3
  • 37
  • 62

0 Answers0