我有一个存储过程,返回250结果!列。选择存储过程的返回值
但我只需要3出250
我想打电话给SP,把只有3点中的值在临时表的。 我不想用250列定义临时表!
这是我想做到这一点,但是这并不能当然的工作:
create #myTempTable (id int, value1 int, value2 int)
insert into #myTempTable
exec myBigFatStoredProc
可不可以这样做无论如何?
再见尔根
我有一个存储过程,返回250结果!列。选择存储过程的返回值
但我只需要3出250
我想打电话给SP,把只有3点中的值在临时表的。 我不想用250列定义临时表!
这是我想做到这一点,但是这并不能当然的工作:
create #myTempTable (id int, value1 int, value2 int)
insert into #myTempTable
exec myBigFatStoredProc
可不可以这样做无论如何?
再见尔根
你可以使用这个优秀的答案:Insert results of a stored procedure into a temporary table
总之它使用OPENROWSET来执行存储过程成是动态创建一个#temp表,而无需名称和类型的所有列。
一种方式将是对原始存储过程切换到用户定义函数结果的表。然后,你可以这样做(例如):
SELECT id, value1, value2
FROM dbo.fxnMyFunctionThatReturns250Columns('SomeParameter') x
关于这个“不舒服”的事情,在这里你只需要3列将始终有返回所有250列的开销/命中的情况。
这可能值得单独使用sproc,因为这可能意味着3列方案可能会导致更为优化的执行计划。
这是不重复使用代码的时间。你只需要三列,然后编写一个可以做到这一点的过程。即使您只能将三列放入临时表中,您仍然在浪费资源来生成它们。
您可以将商店程序更改为函数吗? – Avitus 2010-04-01 14:21:34