В какой части кода вы запрещаете множественный доступ к этому ресурсу?
begin transaction
if exists (select 1 from database.Sys.Tables where name ='Table')
begin drop table database.dbo.Table end
Select top 3000 *
into database.dbo.Table
from OtherTable
commit
Начать транзакцию не делает это. Он настраивается только для сценария фиксации / отката для любых строк, добавляемых в таблицы.
(если существует, отбрасывание) - это состояние гонки, а также воссоздание таблицы с помощью (select..into). Многочисленные люди, заскочившие в этот код сразу, наверняка вызовут всевозможные ошибки. Некоторые создают таблицы, которые другие только что уничтожили, другие отбрасывают таблицы, которые больше не существуют, а другие отбрасывают таблицы, в которые некоторые заняты вставкой. UGH!
Подумайте о предложениях временных таблиц других пользователей или используйте блокировку приложения, чтобы вообще запретить другим пользователям вводить этот код, если критический ресурс занят. Транзакции при удалении / создании - это не то, что вам нужно.