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

时间:2010-04-01 19:38:12

标签: sql sql-server tsql 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

2 个答案:

答案 0 :(得分:24)

不,你需要使用临时表

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

INSERT INTO #results
   EXEC YourProcedure @parma...

然后你可以加入它

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

如果你不知道程序中的列和数据类型,你可以使用这个优秀的答案:Insert results of a stored procedure into a temporary table

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

答案 1 :(得分:4)

如果您的SP可以重写为内联表值UDF,这些通常表现非常好,并且等同于参数化视图。 ITVF可用于您使用表格或视图的任何地方。

如果您的SP不能用作内联TVF(需要本地变量操作),它可以作为多语句TVF(包含BEGIN / END)工作,根据您的需要,它可能会或可能不会表现不佳做。

将SP转换为UDF之后,您仍然可以从SP(SELECT * FROM udf(params))或其他地方调用UDF,它可以用于连接等,因此您的所有代码都在UDF - 没有重复。