Table Renaming in an Explicit Transaction

155 Views Asked by At

I am extracting a subset of data from a backend system to load into a SQL table for querying by a number of local systems. I do not expect the dataset to ever be very large - no more than a few thousand records. The extract will run every two minutes on a SQL2008 server. The local systems are in use 24 x 7.

In my prototype, I extract the data into a staging table, then drop the live table and rename the staging table to become the live table in an explicit transaction.

   SELECT fieldlist 
        INTO Temp_MyTable_Staging
        FROM FOOBAR;
   BEGIN TRANSACTION
        IF(OBJECT_ID('dbo.MyTable') Is Not Null) 
            DROP TABLE MyTable;
        EXECUTE sp_rename N'dbo.Temp_MyTable_Staging', N'MyTable';
    COMMIT

I have found lots of posts on the theory of transactions and locks, but none that explain what actually happens if a scheduled job tries to query the table in the few milliseconds while the drop/rename executes. Does the scheduled job just wait a few moments, or does it terminate? Conversely, what happens if the rename starts while a scheduled job is selecting from the live table? Does transaction fail to get a lock and therefore terminate?

0

There are 0 best solutions below