在T-SQL中组合存储过程和查询

aba*_*hev 19 sql t-sql sql-server stored-procedures dml

如何组合执行存储过程并在常规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
Run Code Online (Sandbox Code Playgroud)

等等

KM.*_*KM. 25

不,你需要使用临时表

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

INSERT INTO #results
   EXEC YourProcedure @parma...
Run Code Online (Sandbox Code Playgroud)

然后你可以加入它

SELECT
    *
    FROM YourTable     y
        JOIN #results  r ON ...
    ....
Run Code Online (Sandbox Code Playgroud)

如果你不知道过程中的列和数据类型,你可以使用这个优秀的答案:将存储过程的结果插入临时表

简而言之,它用于OPENROWSET将存储过程执行到即时创建的#temp表中,而无需命名并知道所有列的类型.