Подтвердить что ты не робот

Объединить хранимую процедуру и запрос в 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

и др.

4b9b3361

Ответ 1

нет, вам нужно использовать временную таблицу

create table #results (col1 int, col2 varchar(5) ...)

INSERT INTO #results
   EXEC YourProcedure @parma...

то вы можете присоединиться к нему

SELECT
    *
    FROM YourTable     y
        JOIN #results  r ON ...
    ....

Если вы не знаете столбцы и типы данных из процедуры, вы можете использовать этот отличный ответ: Вставить результаты хранимой процедуры во временную таблицу

Вкратце, он использует OPENROWSET для выполнения хранимой процедуры в таблице #temp, которая создается "на лету", без необходимости указывать и знать тип всех столбцов.

Ответ 2

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

Если ваш SP не будет работать как встроенный TVF (требуется локальная переменная), он может работать как многозадачный TVF (содержит BEGIN/END), который может или не может работать плохо в зависимости от того, сделать.

После того как ваш SP был превращен в UDF, вы все равно можете вызвать UDF из своего SP (SELECT * FROM udf (params)) или в другом месте, где он может использоваться для соединений и т.д., поэтому весь ваш код находится внутри UDF - нет дублирования.