Это классическое c состояние гонки. Несколько сеансов могут выполнять запрос if OBJECT_ID('tempdb..##myTable') IS NULL
одновременно. Если таблица не существует, обе попытаются создать таблицу, и только одна из них будет успешной.
Один из способов решения проблемы - использовать блокировку приложения для сериализации блока кода среди несколько сеансов. Например:
SET XACT_ABORT ON; --best practice with explict T-SQL transactions
BEGIN TRANSACTION;
EXEC sp_getapplock
@Resource = 'create ##myTable'
,@LockMode = 'Exclusive'
,@LockOwner = 'Transaction';
if OBJECT_ID('tempdb..##myTable') IS NULL
begin
create table ##myTable (
--select stuff
);
end;
COMMIT TRANSACTION; --also releases app lock