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

и т.д.

19
задан David Clarke 21 April 2015 в 02:58
поделиться

2 ответа

нет, вам нужно использовать temp table

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

INSERT INTO #results
   EXEC YourProcedure @parma...

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

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

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

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

25
ответ дан 30 November 2019 в 04:11
поделиться

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

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

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

4
ответ дан 30 November 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: