Объединить хранимую процедуру и запрос в T-SQL
Как объединить выполнение хранимой процедуры и использование ее результата или параметров в обычном SQL-запросе?
например, я хотел бы сделать нечто вроде следующего:
-- passing result of SELECT to SP
SELECT a, b FROM t
EXEC my_sp a, b
-- passing result of SP to INSERT
INSERT INTO t
EXEC my_sp a, b
etc.
2 ответов
нет, вам нужно использовать временную таблицу
create table #results (col1 int, col2 varchar(5) ...)
INSERT INTO #results
EXEC YourProcedure @parma...
затем вы можете присоединиться к нему
SELECT
*
FROM YourTable y
JOIN #results r ON ...
....
Если вы не знаете столбцы и типы данных из процедуры вы можете использовать этот отличный ответ: вставить результаты хранимой процедуры во временную таблицу
вкратце он использует OPENROWSET
чтобы выполнить хранимую процедуру в таблицу #temp, которая создается на лету, без необходимости называть и знать тип всех столбцов.
Если ваш SP может быть переписан как встроенная таблица с значением UDF, они обычно работают очень хорошо и эквивалентны параметризованному представлению. ITVF можно использовать в любом месте, где вы используете таблицу или представление.
Если ваш SP не будет работать как встроенный TVF (требуется локальная манипуляция переменными), он может работать как мульти-оператор TVF (содержит начало/конец), который может или не может работать плохо в зависимости от того, что вам нужно сделать.
после того, как ваш SP был превращен в UDF, вы можете затем по - прежнему вызывайте UDF из вашего SP (выберите* из udf(params)) или в другом месте он может использоваться для соединений и т. д., Поэтому весь ваш код находится внутри UDF-нет дублирования.