Самый простой способ сделать это, предполагая, что вывод хранимой процедуры является детерминированным, состоит в том, чтобы заполнить вывод хранимой процедуры во временную таблицу и затем присоединиться к ней.
CREATE TABLE #tmp
(
COL1 INT NOT NULL,
COL2 INT NOT NULL
)
INSERT INTO #tmp
Exec sproc_YourSproc 'Params'
SELECT *
FROM dbo.Users u
INNER JOIN dbo.Company c ON u.email = c.email
INNER JOIN #tmp t ON t.ID = c.ID
При этом, как сказал Мартин Смит выше, вы, возможно, захотите перенести эту логику в хранимую процедуру, если это возможно.
Также, пожалуйста, не используйте (NOLOCK), это не очень помогает тому, как думает большинство людей, и может привести к действительно неприятным результатам.(Двойное чтение строк, записи-призраки и т. Д.)
Если вам нужно иметь возможность выполнять чтение без возникновения конфликтов чтения / записи, я бы исследовал использование более оптимистических уровней изоляции , чтобы найти способыоптимизировать производительность чтения, чтобы уменьшить возможные перегрузки или найти стратегии индексирования, которые позволили бы удовлетворить чтения без блокировки самой таблицы.