Объединение результатов хранимой процедуры с временной таблицей - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть две таблицы, которые я объединил.Я хотел бы объединить результат объединенной таблицы с результатами хранимой процедуры, которая имеет две переменные.

Я не уверен, стоит ли мне создавать две временные таблицы или другую функцию, поэтому я немного растерялся, с чего мне даже начинать и какой самый простой способ был бы.

Ниже мое первое соединение.

SELECT *
FROM dbo.Users a WITH (NOLOCK)
JOIN Company b ON a.email = b.email 

Ниже моя хранимая процедура, все, что она делает, это разбивает один столбец на несколько строк.Сплит это еще одна функция.Я хотел бы использовать внутреннее соединение.

SELECT a.*, b.* 
FROM [dbo].[Menu] a
CROSS APPLY dbo.Split(SalesPersons, ',') b
WHERE ID = @ID AND Date = @Date

1 Ответ

0 голосов
/ 30 декабря 2018

Самый простой способ сделать это, предполагая, что вывод хранимой процедуры является детерминированным, состоит в том, чтобы заполнить вывод хранимой процедуры во временную таблицу и затем присоединиться к ней.

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), это не очень помогает тому, как думает большинство людей, и может привести к действительно неприятным результатам.(Двойное чтение строк, записи-призраки и т. Д.)

Если вам нужно иметь возможность выполнять чтение без возникновения конфликтов чтения / записи, я бы исследовал использование более оптимистических уровней изоляции , чтобы найти способыоптимизировать производительность чтения, чтобы уменьшить возможные перегрузки или найти стратегии индексирования, которые позволили бы удовлетворить чтения без блокировки самой таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...