Sql 选择存储过程的返回值

Sql 选择存储过程的返回值,sql,stored-procedures,return-value,Sql,Stored Procedures,Return Value,我有一个存储过程,返回一个250的结果!!!列 但我只需要250个中的3个 我想调用SP,只将3列值放入临时表中。 我不想定义一个有250列的临时表 我想这样做,但这当然不行: create #myTempTable (id int, value1 int, value2 int) insert into #myTempTable exec myBigFatStoredProc 无论如何能做到吗 再见,Juergen一种方法是将原始存储过程切换到生成表的用户定义函数。然后你可以做(例如)

我有一个存储过程,返回一个250的结果!!!列

但我只需要250个中的3个

我想调用SP,只将3列值放入临时表中。 我不想定义一个有250列的临时表

我想这样做,但这当然不行:

create #myTempTable (id int, value1 int, value2 int)
insert into #myTempTable 
  exec myBigFatStoredProc
无论如何能做到吗


再见,Juergen一种方法是将原始存储过程切换到生成表的用户定义函数。然后你可以做(例如):

关于这一点,“令人不舒服”的是,如果您只需要3列,那么返回所有250列的开销/命中率总是很高


对于这一点,单独的存储过程可能是值得的,因为它可能意味着3列场景可以产生一个更优化的执行计划。

一种方法是将原始存储过程切换到一个用户定义的生成表的函数。然后你可以做(例如):

关于这一点,“令人不舒服”的是,如果您只需要3列,那么返回所有250列的开销/命中率总是很高


这可能是值得单独进行存储过程的,因为这可能意味着3列场景可以产生更为优化的执行计划。

您可以使用以下极好的答案:


简言之,它使用OPENROWSET将存储过程执行到动态创建的#temp表中,而无需命名和键入所有列。

您可以使用这个极好的答案:


简而言之,它使用OPENROWSET将存储过程执行到动态创建的#temp表中,而无需命名和键入所有列。

这是不重用代码的时候。您只需要三个列,然后编写一个执行该操作的进程。即使您只能将所需的三列放入临时表中,您仍然在浪费生成它们的资源

现在是不重用代码的时候。您只需要三个列,然后编写一个执行该操作的进程。即使您只能将所需的三列放入临时表中,您仍然在浪费生成它们的资源

能否将存储过程更改为函数?能否将存储过程更改为函数?
SELECT id, value1, value2
FROM dbo.fxnMyFunctionThatReturns250Columns('SomeParameter') x